Ich habe zwei Methoden in meiner objective-c-Bibliothek, die nach der Konvertierung in Swift die gleiche Methodensignatur zu haben scheint. Sie sind wie in Objective-C folgt:Objective-C-Methodensignaturen sind nach Swift-Konvertierung identisch
- (void)doSomething:(UIViewController *)viewController __attribute__((deprecated));
- (BOOL)doSomething:(UIViewController *)viewController error:(NSError **)error;
Von dem, was ich über Swift Umwandlung von Methoden gelesen haben NSErrors + BOOL Rückgabewerte in Objective-C verwenden, werden diese Methoden am Ende die folgenden Swift Methode Signaturen mit:
func doSomething(viewController: UIViewController)
func doSomething(viewController: UIViewController) throws
Da der erste Anruf tatsächlich in Objective-C ist veraltet, ist es eine Möglichkeit, Anrufe zu dieser Methode gemacht zu zwingen, die zweite Signatur zu verwenden (um sicherzustellen, dass ich die Vorteile der geworfenen Fehler dauern kann)?
Ich versuche, das Verfahren in der folgenden Weise zu nennen:
do {
try myObjectInstance.doSomething(self)
} catch let error as NSError {
print(error)
}
Dieser Ansatz zur ersten Erklärung auf dem Standard scheint, die mir eine Warnung zu geben, dass a) die Methode veraltet ist und b) Es gibt nichts zu fangen, weil keine Fehler geworfen werden.
Oh, eine Bibliothek Update wäre bedauerlich, wenn das der einzige Weg ist, dass dies getan werden kann. Das heißt, bessere Lösung als gar keine! Vielen Dank!! – Maixy
Vermutlich könnten Sie auch eine separate Obj-C-Methode (in einer Kategorie oder etwas) erstellen, die in dem Swift-Ziel enthalten ist, nur um mit dem Interop zu helfen, und ruft das entsprechende auf. – jtbandes