2016-08-25 3 views
8

Ich versuche, ein Swift 2.2 Projekt Swift 3, zu konvertieren und ich die folgende Fehlermeldung erhalten:Verwendung - observeValueForKeyPath: ofObject: Änderung: Kontext: in 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 

Auf meiner Funktion, deren Unterschrift:

"Workaround: Add an @objc(objectiveC:name:) attribute before the implementation of the optional requirement with the original Objective-C selector inside."

Aber es ist nicht cl:

func observeValue(forKeyPath keyPath: String?, ofObject: Any?, change: [String : Any]?, context: UnsafeMutableRawPointer?)." 

ich den Rat auf der Swift 3 Migration Guide Website gelesen Ohr zu mir, wie das eigentlich in einer Quelldatei angewendet werden soll, und nichts, was ich bis jetzt versucht habe, hat erfolgreich gearbeitet.

Kann jemand erklären, wie man das richtig einrichtet?

Antwort

16

Beginnen Sie einfach mit der Eingabe observeValueFor... und Xcode schlägt Ihnen eine gültige Autovervollständigung dafür vor. Wählen Sie es, und Sie sollten gut gehen.

Ihre Funktion sollte wie folgt aussehen:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) 
+1

funktioniert nicht (wie von swift 3.0.1) siehe + Mark Antwort –

+0

Es scheint, dass die Klasse, die das ist, eine Unterklasse von NSObject sein muss. Versucht, dies in einem Singleton ohne Unterklasse NSObject zu tun und funktioniert nicht. –

+0

@SunnyPatel Ja, KVO arbeitet nur mit NSObject-Unterklassen (eigentlich nur mit verwalteten Objc-Laufzeitklassen). – Cristik

17

Dies ist, was (endlich) für mich gearbeitet mit Swift 3.0 in Xcode Version 8.0 (8A218a):

@objc 
override open func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
Verwandte Themen