UIViewController-Erweiterung zum Instanziieren aus dem Storyboard
Ich versuche, eine kleine Erweiterung in Swift zu schreiben, um die Instanziierung eines @ zu handhabeUIViewController
von einem Storyboard.
Meine Idee ist die folgende: SeitUIStoryboard
's MethodeinstantiateViewControllerWithIdentifier
benötigt einen Bezeichner, um den View Controller eines bestimmten Storyboards zu instanziieren. Weisen Sie daher nicht jedem View Controller in meinem Storyboard einen Bezeichner zu, der dem genauen Klassennamen entspricht (d. h. einUserDetailViewController
hätte den Bezeichner "UserDetailViewController") und erstelle eine Klassenmethode auf UIViewController, die:
UIStoryboard
Instanz als eindeutiger Parameterden aktuellen Klassennamen als StringAnrufinstantiateViewControllerWithIdentifier
auf der Storyboard-Instanz mit dem Klassennamen als Parameterget das neu erstellteUIViewController
instance und gib es zurückSo, anstatt (was den Klassennamen als String wiederholt, nicht sehr schön)
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("UserDetailViewController") as UserDetailViewController
es wäre
let vc = UserDetailViewController.instantiateFromStoryboard(self.storyboard!)
Ich habe es in Objective-C mit der folgenden Kategorie gemacht:
+ (instancetype)instantiateFromStoryboard:(UIStoryboard *)storyboard
{
return [storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([self class])];
}
Aber ich bin völlig mit der Swift-Version fest. Ich hoffe, dass es eine Möglichkeit gibt, dies zu tun. Ich habe folgendes versucht:
extension UIViewController {
class func instantiateFromStoryboard(storyboard: UIStoryboard) -> Self {
return storyboard.instantiateViewControllerWithIdentifier(NSStringFromClass(Self))
}
}
ReturningSelf
Anstatt vonAnyObject
ermöglicht, dass die Typinferenz funktioniert. Ansonsten müsste ich jede einzelne Rückgabe dieser Methode besetzen, was ärgerlich ist, aber vielleicht hast du eine bessere Lösung?
Dies gibt mir den Fehler:Use of unresolved identifier 'Self'
DasNSStringFromClass
Teil scheint das Problem zu sein.
Was denkst du
Gibt es eine Möglichkeit, @ zurückzugebeSelf
von Klassenfunktionen?
Wie können Sie dies zum Laufen bringen, ohne den Rückgabewert jedes Mal umsetzen zu müssen? (d. -> Self
als Rückgabewert)
Vielen Dank