我尝试将一些客观的c代码重写为swift。现在我得到一个非常奇怪的错误。我在playgroud中尝试了代码,完全不受其他代码的影响。
以下是我要翻译的部分:
NSDictionary *info = [self infoForBinding:@"theBinding"];
[[info objectForKey:NSObservedObjectKey]
setValue:MyValue
forKeyPath:[info objectForKey:NSObservedKeyPathKey]];
这是代码,我试过了:
class x: NSButtonCell {
func a() {
var info = infoForBinding("theBinding")
info[NSObservedObjectKey]?.setValue(nil, forKeyPath: info[NSObservedKeyPathKey])
}
}
现在我收到错误'NSString' is not convertible to 'DictionaryIndex<NSObject, AnyObject>'
。有什么想法吗?
更新:
这是有效的...我不知道为什么。
info[NSObservedObjectKey]?.setValue(MyValue forKeyPath: (info[NSObservedKeyPathKey] as NSString))
答案 0 :(得分:1)
原因
info[NSObservedObjectKey]?.setValue(MyValue forKeyPath: (info[NSObservedKeyPathKey] as NSString))
的工作原理是,从beta 3开始,NSDictionary#getValue
方法返回一个DictionaryIndex对象,而不是将其转换为NSObject / AnyObject。通过明确地投射它(这是一个很好的实践,因为Swift设计师似乎反对过多的暗示投射),你可以安全地将其传递到setValue
而没有任何骚动。