1

Mein Projekt ist eine Mischung aus Obj-C und Swift, und ich versuche, meine AppDelegate-Klasse mit Swift zu erweitern.Wie implementiere ich Delegate-Methoden durch Swift-Erweiterung

So jetzt habe ich AppDelegate.m, AppDelegate.h und AppDelegate.swift. Die meisten Methoden sind in der Obj-C-Datei, aber ich versuche, nur eine der Methoden zu implementieren:

extension AppDelegate { 

    func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool { 

    } 
} 

aber es beschwert:

AppDelegate.swift:11:10: Method 'application(_:continueUserActivity:restorationHandler:)' with Objective-C selector 'application:continueUserActivity:restorationHandler:' conflicts with previous declaration with the same Objective-C selector 

Dies ist eine Einschränkung der Swift-Erweiterung ? Oder gibt es eine Möglichkeit, diese Delegate-Methode in meiner Swift-Erweiterungsdatei zu implementieren?

+0

Wenn Sie eine vorhandene Methode überschreiben möchten, müssen Sie eine Unterklasse erstellen, anstatt eine Erweiterung zu schreiben – Daniel

+0

@simpleBob Es ist keine bestehende Methode, ich habe es nicht in meiner Obj-C-Klasse implementiert. –

Antwort

2

Sie können so etwas nicht machen. AppDelegate hat diese Methode definiert (UIApplicationDelegate Protokoll sagt so). Die einfachste Lösung wäre, AppDelegate in Swift umzuschreiben.

Sie haben auch schwieriger Lösung - entfernen Sie UIApplicationDelegate von Ihrem AppDelegate und implementieren Sie dieses Protokoll in Ihrer Erweiterung. Es kann zu unerwarteten Fehlern kommen, wenn Ihre AppDelegate beträchtliche Größe hat.

+0

Ok, nehmen wir an, das ist ein View-Controller, stattdessen mit einer 'TableViewDelegate' Methode, die implementiert werden muss. Kann ich meinen View-Controller erweitern und stattdessen diese Methoden implementieren? Wenn ja, wie funktioniert es in diesem Szenario, aber nicht hier? (P.S. Meine App Delegat ist nicht so groß, so ist es nicht eine große Sache in Swift neu schreiben) –

+0

Es funktioniert, wenn Sie 'SomeViewController' (Unterklasse von 'UIViewController') und Erweiterung für diese VC mit Protokoll 'UITableViewDelegate' haben. Aber es wird fehlschlagen, wenn Sie 'SomeViewController' (Unterklasse von' UIViewController') und 'UITableViewController' Protokoll erstellen und dann eine Erweiterung für' SomeViewController' mit den in Extension beschriebenen Methoden erstellen. –

Verwandte Themen