Per la maggior parte, Swift rappresenta un enorme miglioramento rispetto all'Obiettivo-C in termini di sicurezza del tipo. Un'eccezione eclatante sono i selettori. In Objective-C, utilizzando l'espressione @selector(notARealSelector:)
verrà visualizzato un avviso del compilatore. L'equivalente Swift, Selector("notARealSelector:")
verrà sempre compilato ma non riuscirà in fase di esecuzione.Esiste un modo tipicamente valido per utilizzare i selettori in Swift?
C'è un modo tipicamente valido per utilizzare i selettori in Swift, quindi posso lavorare con API Objective-C che li richiedono?
Ho un sacco di osservatori NSNotification
nella mia app e vorrei avere qualche tipo di controllo in fase di compilazione che non sto facendo errori di battitura nei miei selettori.
Modifica: il caso d'uso specifico è NSNotificationCenter.addObserver
.
Può fare un esempio di come si sta utilizzando il Il blocco '@selector()' al momento? Gli oggetti che stai chiamando questi metodi espongono (tramite la conformità al protocollo o la sottoclassi) i metodi in qualsiasi momento? Puoi usare 'myDelegate? .scrollViewDidScroll? (...)', ma ciò richiede che il delegato sia almeno conforme al protocollo, in modo che il compilatore abbia una possibilità di determinare se è possibile che anche quel metodo sia lì. –
Come ho detto nella domanda, 'NSNotificationCenter.addObserver' – Bill
Un altro uso comune di @selector è il target/azione utilizzato da' UIControl' e sottoclassi. per esempio. 'button.addTarget (self, action:" doTap ", forControlEvents: .TouchUpInside)' - frustrante che il compilatore rapido non possa avvisare di errori dovuti a errori di digitazione o modifica dei nomi dei metodi. –