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:

akzeptiere einUIStoryboard 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ück

So, 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

Antworten auf die Frage(10)

Ihre Antwort auf die Frage