- Che cos'è l' @objcinferenza? Cosa sta succedendo?
In Swift 3, il compilatore viene distribuito @objcin diversi punti, quindi non dovresti farlo. In altre parole, si assicura di aggiungere @objcper te!
In Swift 4, il compilatore non lo fa più (tanto). Ora devi aggiungere @objcesplicitamente.
Per impostazione predefinita, se disponi di un progetto pre-Swift 4, riceverai avvisi a riguardo. In un progetto Swift 4, otterrai errori di compilazione. Questo è controllato tramite l' SWIFT_SWIFT3_OBJC_INFERENCEimpostazione di compilazione. In un progetto pre-Swift 4 questo è impostato su On. Consiglierei di impostare questo su Default(o Off), che ora è l'opzione predefinita su un nuovo progetto.
Ci vorrà del tempo per convertire tutto, ma poiché è l'impostazione predefinita per Swift 4, vale la pena farlo.
- Come posso interrompere gli avvisi / errori del compilatore?
Esistono due modi per convertire il codice in modo che il compilatore non si lamenta.
Uno è da utilizzare @objcsu ogni funzione o variabile che deve essere esposta al runtime di Objective-C:
@objc func foo() {
}
L'altro è usare @objcMembersuna Classdichiarazione. Questo si assicura di aggiungere automaticamente @objca TUTTE le funzioni e le variabili nella classe. Questo è un modo semplice, ma ha un costo, ad esempio, può aumentare le dimensioni della tua applicazione esponendo funzioni che non avevano bisogno di essere esposte.
@objcMembers class Test {
}
- Che cos'è @objce perché è necessario?
Se si introducono nuovi metodi o variabili in una classe Swift, contrassegnarli come @objcli espone al runtime Objective-C. Ciò è necessario quando si dispone di codice Objective-C che utilizza la classe Swift o, se si utilizzano funzionalità di tipo Objective-C come Selectors. Ad esempio, il modello di azione-obiettivo:
button.addTarget(self, action:#selector(didPressButton), for:.touchUpInside)
- Perché non dovrei segnare tutto @objc?
Ci sono aspetti negativi che derivano dalla marcatura di qualcosa come @objc:
- Dimensione binaria dell'applicazione aumentata
- Nessun sovraccarico di funzioni
Tieni presente che si tratta di un riepilogo di altissimo livello e che è più complicato di quanto ho scritto. Consiglierei di leggere la proposta attuale per ulteriori informazioni.
fonti: