gpt4 book ai didi

swift - 如何比较 NSPersistentStoreUbiquitousTransitionType 枚举值

转载 作者:可可西里 更新时间:2023-11-01 01:06:41 29 4
gpt4 key购买 nike

尝试使用此方法比较从 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 的诀窍时,我又被难住了!

最佳答案

这种情况很少见,编译器实际上会告诉您到底出了什么问题! 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() 方法。

关于swift - 如何比较 NSPersistentStoreUbiquitousTransitionType 枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26226589/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com