'NSString'不能转换为'DictionaryIndex <nsobject,anyobject =“”>'</nsobject,>

时间:2014-08-02 23:03:44

标签: swift

我尝试将一些客观的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))

1 个答案:

答案 0 :(得分:1)

原因

info[NSObservedObjectKey]?.setValue(MyValue forKeyPath: (info[NSObservedKeyPathKey] as NSString))

的工作原理是,从beta 3开始,NSDictionary#getValue方法返回一个DictionaryIndex对象,而不是将其转换为NSObject / AnyObject。通过明确地投射它(这是一个很好的实践,因为Swift设计师似乎反对过多的暗示投射),你可以安全地将其传递到setValue而没有任何骚动。