2016-05-25 12 views
0

Meine Frage ist eher eine allgemeine Frage als ein spezifisches Problem. Es scheint, dass Sie für eine Klasse, die in Swift geschrieben ist, den optionalen Workflow verwenden können, um zu überprüfen, ob die Methode existiert (?). Wenn dies nicht der Fall ist, können Sie davon ausgehen, dass es nil zurückgegeben hat.Wann verwenden Sie in swift?

Dies scheint nur zu gelten, wenn die Klasse in Swift geschrieben wird. (Ist das eine Korrekturannahme)?

Wenn Sie jetzt eine Objective-C-Klasse referenzieren und prüfen möchten, ob eine Methode existiert, können Sie die respondsToSelector Prüfung mit dem Selektor #selector verwenden.

Soll dies nur für Objective-C-Klassen und Swift-Klassen, Protokolle, Protokoll-/Klassenerweiterungen verwendet werden, die von Objective-C-Klassen erben?

Lassen Sie mich wissen, wenn ich einen Teil meiner Fragen erweitern sollte.

+0

Bitte überprüfen Sie diesen Beitrag http://stackoverflow.com/questions/24167791/what-is-the-swift-äquivalence-of-respondstoselector –

+0

Vielen Dank.ich denke, wenn Sie überprüfen, ob eine Protokollmethode implementiert wurde, ist es immer noch basierend darauf, ob der Typ mit nsobject übereinstimmt. – Chris

Antwort

1

Es gibt kaum alle müssen explizit in Swift respondsToSelector aufrufen. Der einzige Zeitpunkt, an dem Sie dies tun möchten, ist der Umgang mit einem NSObject, und in diesem Fall ist es vermutlich ein AnyObject oder ein Delegate-Protokoll-Adopter, und in beiden Fällen können Sie einfach die Fragezeichen-Syntax verwenden (die respondsToSelector aufruft) für dich).

+0

Aber wenn Sie eine Kakao-Klasse oder Unterklasse implementieren, sind Sie immer noch mit Nsobject, richtig?Ich denke, ich bin mir nicht 100% sicher, ob alle Kakaoklassen in schnelle umgewandelt wurden. Vielen Dank für Ihre Anregungen! – Chris

+0

@cmarti1138: Ja, Cocoa-Klassen sind Objective-C-Klassen, daher sind ihre Methoden Objective-C-Methoden, und Sie können den optionalen Mechanismus mit AnyObject verwenden, um diese Methoden aufzurufen, wenn sie antworten. Wenn Ihre Frage ist, wie man das macht, wenn der Typ des Ausdrucks kein 'AnyObject' ist, können Sie ihn zuerst in' AnyObject' umwandeln: '(... als AnyObject) .method? (...)' – newacct

+0

Ty für die Antworten alle !!! – Chris

0

Es scheint für eine Klasse, die die in Swift geschrieben ist, können Sie den optionalen Workflow verwenden, um zu überprüfen, ob die Methode existiert (?). Wenn es nicht ist, können Sie davon ausgehen, dass es keine NULL zurückgegeben hat.

Dies scheint nur zu gelten, wenn die Klasse in Swift geschrieben wird. (Ist das eine Korrekturannahme)?

Dies ist nicht korrekt. Wenn Sie sagen, verwenden Sie den optionalen Workflow, um zu überprüfen, ob die Methode existiert, nehme ich an, was passiert, wenn Sie Methoden vom Typ AnyObject aufrufen, die im Abschnitt "id Compatibility" im Abschnitt Verwenden von Swift mit "Unbekannte Auswahl und optionale Verkettung" beschrieben sind Kakao und Objective-C Anleitung.

Diese Funktion nur funktioniert mit Objective-C (@objc) Methoden. AnyObject können Sie nur auf Objective-C (@objc) Methoden zugreifen.

Sie können eine beliebige Objective-C-Methode aufrufen und auf eine beliebige Eigenschaft eines AnyObject-Werts zugreifen, ohne auf einen spezifischeren Klassentyp umzustellen. Diese enthält Objective-C-kompatible Methoden und Eigenschaften, die mit dem Attribut @objc gekennzeichnet sind.

Sie können nicht AnyObject verwenden reine Swift (nicht @objc) Methoden aufrufen.

+0

Sorry, ich wollte sagen, wenn eine Methode existiert. Ich habe meine Frage korrigiert. – Chris

+0

@ cmarti1138: Ich habe das Zitat geändert, um zu sagen, dass – newacct

Verwandte Themen