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

Cos*_*smo 8 cocoa ios swift 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
Run Code Online (Sandbox Code Playgroud)

在我的功能签名是:

func observeValue(forKeyPath keyPath: String?, ofObject: Any?, change: [String : Any]?, context: UnsafeMutableRawPointer?)."
Run Code Online (Sandbox Code Playgroud)

我已阅读Swift 3迁移指南网站上的建议:

"解决方法:在实现可选需求之前添加一个@objc(objectiveC:name :)属性,其中包含原始的Objective-C选择器."

但是我不清楚这实际上应该如何应用于源文件中,到目前为止我所尝试的并没有成功.

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

Mar*_*ham 18

这是(最终)在Xcode Version 8.0(8A218a)中使用Swift 3.0为我工作的:

@objc
override open func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
Run Code Online (Sandbox Code Playgroud)


Cri*_*tik 16

只需开始输入observeValueFor...,Xcode就会建议您使用有效的自动完成功能.选择它,你应该很高兴.

那么你的功能应该是这样的:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) 
Run Code Online (Sandbox Code Playgroud)