使用 - observeValueForKeyPath:ofObject:change:context:在Swift 3中

时间:2016-08-25 04:27:47

标签: ios swift cocoa swift3

我正在尝试将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选择器。”

但是我不清楚这实际上应该如何应用于源文件,到目前为止我没有尝试过任何成功的工作。

任何人都可以解释如何正确设置吗?

2 个答案:

答案 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?)