我正在尝试将Swift 2.2项目转换为Swift 3,我收到以下错误:
Method 'observeValue(forKeyPath:ofObject:change:context:)' with Objective-C selector 'observeValueForKeyPath:ofObject:change:context:' conflicts with method 'observeValue(forKeyPath:of:change:context:)' from superclass 'NSObject' with the same Objective-C selector" for the function call
在我的签名为:
的函数上func observeValue(forKeyPath keyPath: String?, ofObject: Any?, change: [String : Any]?, context: UnsafeMutableRawPointer?)."
我已阅读Swift 3迁移指南网站上的建议:
“解决方法:在实现可选需求之前添加一个@objc(objectiveC:name :)属性,其中包含原始的Objective-C选择器。”
但是我不清楚这实际上应该如何应用于源文件,到目前为止我没有尝试过任何成功的工作。
任何人都可以解释如何正确设置吗?
答案 0 :(得分:18)
这是(最终)在Xcode版本8.0(8A218a)中使用Swift 3.0为我工作的:
@objc
override open func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
答案 1 :(得分:16)
刚开始输入observeValueFor...
,Xcode
会建议您进行有效的自动填充。选择它,你应该很高兴。
你的功能应该是这样的:
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)