如何比较NSPersistentStoreUbiquitousTransitionType枚举值

时间:2014-10-06 23:54:50

标签: swift enums

尝试使用此

比较从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的时候,我再次难过了!

1 个答案:

答案 0 :(得分:3)

这是一种罕见的情况,编译器实际上正在告诉你究竟出了什么问题! typeUInt,而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()方法。