- Was ist @objcFolgerung? Was ist los?
In Swift 3schließt der Compiler @objcan mehreren Stellen, sodass Sie dies nicht tun müssen. Mit anderen Worten, es stellt sicher, @objcfür Sie hinzuzufügen !
In macht Swift 4der Compiler dies nicht mehr (so viel). Sie müssen jetzt @objcexplizit 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_INFERENCEBuild-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, @objcfü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 @objcMembersdurch eine ClassErklärung zu verwenden. Dies stellt sicher , automatisch hinzufügen , @objcum 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 @objcund warum ist es notwendig?
Wenn Sie einer Swift-Klasse neue Methoden oder Variablen hinzufügen, werden sie durch Markieren als @objcfü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: