Ich habe ein Objective-C-Protokoll, das hauptsächlich von Objective-C-Objekten und einem oder zwei Swift-Objekten verwendet wird.Protokollerweiterung auf einem ObjC-Protokoll
Ich möchte das Protokoll in Swift erweitern und 2 Funktionen hinzufügen. Eine für die Anmeldung und eine weitere für die Benachrichtigung.
Wenn ich hinzufügen, diese
func registerForPresetLoadedNotification() {
NSNotificationCenter.defaultCenter().addObserver(self as AnyObject,
selector: #selector(presetLoaded(_:)),
name: kPresetLoadedNotificationName,
object: nil)
}
func presetLoaded(notification: NSNotification) {
}
ich einen Fehler auf dem #selector erhalten, die sagt Argument of '#selector' refers to a method that is not exposed to Objective-C
Wenn ich dann presetLoaded markieren als @objc
ich eine Fehlermeldung erhalten, die besagt, @objc can only be used with members of classes, @objc protocols, and concrete extensions of classes
ich auch kann die Protokollerweiterung nicht als @objc markieren
Wenn ich das Objective-C-Protokoll als Swift erstellen Protokoll bekomme ich den gleichen Fehler.
Gibt es einen Weg, dies zu erreichen, der für Objective-C und Swift-Klassen funktioniert, die das Protokoll verwenden?
Wie erweitern Sie das Protokoll und definieren Sie diese Funktionen als _optional_-Funktionen in Objective-C und implementieren sie in Swift? Nur ein Gedanke. – skim
Meine Idee war, die Registerfunktion in der Erweiterung zu implementieren und dann die Benachrichtigungshandlerfunktion in den Klassen objective-c und swift zu überschreiben. Ich muss Parameter in den Ziel-C-Klassen setzen und sie in Swift implementieren funktioniert nicht. – jarryd
Ich bin mir nicht sicher, ob ich dich richtig verstehe. Es klingt wie das, was Sie tun möchten, ist zu erweitern (fügen Sie Funktionen zum vorhandenen Protokoll hinzu) und eine Standardimplementierung in ObjC zur Verfügung stellen und einen Teil dieser Implementierung in Swift überschreiben. Ist das richtig? – skim