Sto cercando di convertire il codice sorgente del mio progetto da Swift 3 a Swift 4. Un avvertimento che Xcode mi sta dando riguarda i miei selettori.
Ad esempio, aggiungo una destinazione a un pulsante usando un selettore normale come questo:
button.addTarget(self, action: #selector(self.myAction), for: .touchUpInside)
Questo è l'avvertimento che mostra:
L'argomento di '#selector' si riferisce al metodo di istanza 'myAction ()' in 'ViewController' che dipende dall'inferenza dell'attributo '@objc' deprecata in Swift 4
Aggiungi "@objc" per esporre questo metodo di istanza a Objective-C
Ora, premere Fix
sul messaggio di errore fa questo alla mia funzione:
// before
func myAction() { /* ... */ }
// after
@objc func myAction() { /* ... */ }
Non voglio davvero rinominare tutte le mie funzioni per includere il @objc
segno e presumo che non sia necessario.
Come riscrivo il selettore per gestire la deprecazione?
Domanda correlata:
@objc
? È un po 'fastidioso, ma in genere rendo private queste funzioni, richiedendomi di contrassegnarlo come @objc
comunque.
@objcMembers
per esporre tutti i membri compatibili con Obj-C a Obj-C, ma non lo consiglierei a meno che tu non abbia effettivamente bisogno che tutta la tua classe sia esposta.
@objc
è ora necessario per esporli a Obj-C, e quindi utilizzare con i selettori.