尝试使用此
比较从NSPersistentStoreCoordinatorStoresDidChangeNotification
收到的值时出现以下错误
// Check type of transition
if let type = n.userInfo?[NSPersistentStoreUbiquitousTransitionTypeKey] as? UInt {
FLOG(" transition type is \(type)")
if (type == NSPersistentStoreUbiquitousTransitionType.InitialImportCompleted) {
FLOG(" transition type is NSPersistentStoreUbiquitousTransitionTypeInitialImportCompleted")
}
}
但是我得到以下编译器错误
NSPersistentStoreUbiquitousTransitionType is not convertible to UInt
就在我认为我已经掌握了Swift的时候,我再次难过了!
答案 0 :(得分:3)
这是一种罕见的情况,编译器实际上正在告诉你究竟出了什么问题! type
是UInt
,而NSPersistentStoreUbiquitousTransitionType.InitialImportCompleted
是枚举的一个案例。要比较它们,你需要将它们放在同一页面上 - 获得枚举的原始值可能是最安全的:
if (type == NSPersistentStoreUbiquitousTransitionType.InitialImportCompleted.toRawValue()) {
FLOG(" transition type is NSPersistentStoreUbiquitousTransitionTypeInitialImportCompleted")
}
在Xcode 6.1中, 注意: ,枚举略有变化,因此您使用.rawValue
代替.toRawValue()
。
要以另一种方式处理它,您需要将通知中的数据转换为枚举值。文档说:“相应的值是作为NSNumber对象的NSPersistentStoreUbiquitousTransitionType枚举值之一。”所以代码的第一部分恰到好处,然后你需要使用枚举的fromRaw(number)
静态方法:
if let type = n.userInfo?[NSPersistentStoreUbiquitousTransitionTypeKey] as? Uint {
// convert to enum and unwrap the optional return value
if let type = NSPersistentStoreUbiquitousTransitionType.fromRaw(type) {
// now you can compare directly with the case you want
if (type == .InitialImportCompleted) {
// ...
}
}
}
Xcode 6.1中的 注意: ,您使用NSPersistentStoreUbiquitousTransitionType(rawValue: type)
代替fromRaw()
方法。