pracuję z Observer
API (ObserverSet), które mają następujące funkcje:Swift - częściowe zastosowanie funkcji z rodzajowych
public func add<T: AnyObject>(object: T, _ f: T -> Parameters -> Void) -> ObserverSetEntry<Parameters>
To po prostu zarejestrować object
następnie wywołać metodę instancji f
na object
gdy powiadomień wyzwala
W jednym z moich menedżerów muszę ukryć poprzednią funkcję z jedną z moich, więc mogę zmusić obserwatora do wywołania funkcji predefiniowanej zaimplementowanej za pośrednictwem protokołu.
Oto co zrobiłem do tej pory:
@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)
}
Niestety, mam następujący błąd pokazuje się Partial application of generic method is not allowed
Znalazłem ewentualnego obejścia gdzieś na SO które wyglądają tak:
let f: T -> String -> Void = { (obs: T) in obs.dynamicType.observe(obs) }
Ale ta linia kodu napędza mój XCode szalony z pewnym Segmentation Fault: 11
na kompilacji (i Communication interrupted
z Playground
..)
Czy istnieje jakieś obejście tego, co próbuję zrobić?
Co stanie się, jeśli zadeklarujesz swój protokół jako czysty protokół Swift, zamiast degradować go do protokołu objc? – augustzf
Dokładny ten sam błąd. Jeśli również usunę implementację 'NSObjectProtocol', otrzymam' error: 'T' nie jest podtypem 'inout T'' – Yaman