Ich arbeite mit einem Observer
API (ObserverSet), die die folgende Funktion haben:swift - Teilfunktion Anwendung mit Generika
public func add<T: AnyObject>(object: T, _ f: T -> Parameters -> Void) -> ObserverSetEntry<Parameters>
Es ist einfach ein object
dann rufen Sie die Instanzmethode f
auf dem object
registrieren, wenn Benachrichtigung triggers
In einem meiner Manager, ich muss die vorherige Funktion mit einem von mir verstecken, so kann ich einen Beobachter zwingen, eine vordefinierte Funktion über ein Protokoll implementiert aufrufen.
Hier ist, was ich bisher getan habe:
@objc protocol Observer : NSObjectProtocol {
func observe(param: String) -> Void
}
func addObserver<T: AnyObject where T: Observer>(observer: T) {
let f: T -> String -> Void = observer.dynamicType.observe
entries.addObserver(observer, f)
}
Leider habe ich die folgende Fehlermeldung zeigt sich Partial application of generic method is not allowed
,
ich eine mögliche Abhilfe irgendwo auf SO gefunden haben, die so aussehen:
let f: T -> String -> Void = { (obs: T) in obs.dynamicType.observe(obs) }
Aber diese Codezeile treibt meine XCode verrückt mit einigen Segmentation Fault: 11
auf Kompilierung (und Communication interrupted
mit Playground
..)
Gibt es eine Problemumgehung für das, was ich versuche zu tun?
Was passiert, wenn Sie Ihr Protokoll als reines Swift-Protokoll deklarieren, anstatt es zu einem objc-Protokoll zu degradieren? – augustzf
Genau der gleiche Fehler. Wenn ich auch die Implementierung von 'NSObjectProtocol' entferne, bekomme ich' error: 'T' ist kein Subtyp von 'inout T'' – Yaman