- Was ist @objc
Folgerung? Was ist los?
In Swift 3
schließt der Compiler @objc
an mehreren Stellen, sodass Sie dies nicht tun müssen. Mit anderen Worten, es stellt sicher, @objc
für Sie hinzuzufügen !
In macht Swift 4
der Compiler dies nicht mehr (so viel). Sie müssen jetzt @objc
explizit hinzufügen .
Wenn Sie ein Projekt vor Swift 4 haben, erhalten Sie standardmäßig Warnungen dazu. In einem Swift 4-Projekt werden Buildfehler angezeigt. Dies wird über die SWIFT_SWIFT3_OBJC_INFERENCE
Build-Einstellung gesteuert . In einem Pre-Swift 4-Projekt ist dies auf eingestellt On
. Ich würde empfehlen, dies auf Default
(oder Off
) zu setzen, was jetzt die Standardoption für ein neues Projekt ist.
Es wird einige Zeit dauern, bis alles konvertiert ist, aber da dies die Standardeinstellung für Swift 4 ist, lohnt es sich, dies zu tun.
- Wie stoppe ich die Compiler-Warnungen / Fehler?
Es gibt zwei Möglichkeiten, Ihren Code zu konvertieren, damit sich der Compiler nicht beschwert.
Eine Möglichkeit besteht darin, @objc
für jede Funktion oder Variable zu verwenden, die für die Objective-C-Laufzeit verfügbar gemacht werden muss:
@objc func foo() {
}
Die andere ist @objcMembers
durch eine Class
Erklärung zu verwenden. Dies stellt sicher , automatisch hinzufügen , @objc
um ALL die Funktionen und Variablen in der Klasse. Dies ist der einfache Weg, der jedoch Kosten verursacht. Beispielsweise kann er die Größe Ihrer Anwendung erhöhen, indem Funktionen verfügbar gemacht werden, die nicht verfügbar gemacht werden mussten.
@objcMembers class Test {
}
- Was ist @objc
und warum ist es notwendig?
Wenn Sie einer Swift-Klasse neue Methoden oder Variablen hinzufügen, werden sie durch Markieren als @objc
für die Objective-C-Laufzeit verfügbar gemacht. Dies ist erforderlich, wenn Sie über Objective-C-Code verfügen, der Ihre Swift-Klasse verwendet, oder wenn Sie Funktionen vom Typ Objective-C wie verwenden Selectors
. Zum Beispiel das Zielaktionsmuster:
button.addTarget(self, action:#selector(didPressButton), for:.touchUpInside)
- Warum sollte ich nicht alles markieren @objc
?
Es gibt Negative, die mit der Kennzeichnung von etwas verbunden sind als @objc
:
- Erhöhte Größe der Anwendungsbinärdatei
- Keine Funktionsüberlastung
Bitte denken Sie daran, dass dies eine Zusammenfassung auf sehr hoher Ebene ist und dass sie komplizierter ist als ich geschrieben habe. Ich würde empfehlen, den aktuellen Vorschlag zu lesen, um weitere Informationen zu erhalten.
Quellen: