Swift 3中的NSKeyValueChangeKey类型转换错误
我一直在尝试从2.3版迁移到Swift 3版,在阅读了所有这些之后,其中两个版本显示了类似的错误,但不完全相同,但我无法解决此错误 “[NSKeyValueChangeKey:Any]”不能转换为“[String:Int]”Swift 3中的NSKeyValueChangeKey类型转换错误,swift,Swift,我一直在尝试从2.3版迁移到Swift 3版,在阅读了所有这些之后,其中两个版本显示了类似的错误,但不完全相同,但我无法解决此错误 “[NSKeyValueChangeKey:Any]”不能转换为“[String:Int]” override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawP
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
guard let changeKeys = change as? [String: Int] else {
print("changeKeys failed")
return
}
}
如何解决此问题?在Swift 3中,
change
参数包含一个带有预定义NSKeyValueChangeKey
键的字典
indexesKey
kindKey
newKey
notificationIsPriorKey
oldKey
if let foo = change?[.newKey] as? Int
我终于知道错误告诉了我什么,并通过更改类型解决了问题。我相信Swift 2.x是一种字符串类型
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
guard let changeKeys = change as? [NSKeyValueChangeKey: Int] else {
print("changeKeys failed")
return
}
}
所以不再有守卫声明了?有时我不知道他们是在让斯威夫特变得更好还是更糟。这和ObjC一样多<代码>如果let或
保护let
取决于需要。在Swift中,你应该更加注意你在做什么,在这种情况下,你应该知道你在观察什么。