- Che cos'è l' @objc
inferenza? Cosa sta succedendo?
In Swift 3
, il compilatore viene distribuito @objc
in diversi punti, quindi non dovresti farlo. In altre parole, si assicura di aggiungere @objc
per te!
In Swift 4
, il compilatore non lo fa più (tanto). Ora devi aggiungere @objc
esplicitamente.
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_INFERENCE
impostazione 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 @objc
su ogni funzione o variabile che deve essere esposta al runtime di Objective-C:
@objc func foo() {
}
L'altro è usare @objcMembers
una Class
dichiarazione. Questo si assicura di aggiungere automaticamente @objc
a 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'è @objc
e perché è necessario?
Se si introducono nuovi metodi o variabili in una classe Swift, contrassegnarli come @objc
li 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: