Hi there =) Ich war gerade mit einem Designproblem konfrontiert, bei dem ich (im Wesentlichen) Folgendes tun muss:
Ich möchte ein bisschen Code in viewWillAppear:
von jeder UIViewController
Unterklasse einfügen, die einem Protokoll MyProtocol
entspricht. Im Code erklärt:
Das Hauptproblem hier ist, dass ich zwei Dinge in der Erweiterung UIVIewController
machen muss:
MyProtocol
und UIViewController
APIs UIViewController
methode initialize()
, um in der Lage zu sein, viewWillAppear:
zu swizzlen
Diese beiden Funktionen scheinen inkompatibel zu sein (ab Swift 3), weil:
extension UIViewController where Self: MyProtocol
) extension MyProtocol where Self: UIViewController
hinzufügen, aber wir können KEINE Methoden einer Klasse in einer Protokollerweiterung überschreiben , was bedeutet, dass wir t public override class func initialize()
, das für das Swizzling benötigt wird. Ich habe mich also gefragt, ob da draußen jemand ist, der eine schnelle Lösung für dieses Problem anbieten kann? =)
Vielen Dank im Voraus !!
Nun, bis jetzt habe ich keine wirklich befriedigende Art gefunden, dies zu tun, aber ich habe mich entschieden zu posten, was ich für dieses spezielle Problem getan habe. Kurz gesagt, die Lösung geht so (mit dem ursprünglichen Beispielcode):
%Vor%Nachteile:
UIViewControllers
aus, auch wenn wir nur diejenigen validieren, die dem Protokoll MyProtocol
entsprechen, um die sensiblen Codezeilen auszuführen. Ich hoffe sehr, dass es jedem anderen hilft, der sich in einer ähnlichen Situation befindet =)
Sie waren in der Nähe der Lösung. Ich muss es einfach anders herum machen. Erweitern Sie das Protokoll nur, wenn es Teil von UIViewController ist.
%Vor%Tags und Links ios swift uiviewcontroller swift-protocols swift-extensions