faccio un protocollo:stoccaggio estensione Swift per i protocolli
protocol SomeProtocol {
func getData() -> String
}
Faccio una struct che si conforma ad esso:
struct SomeStruct: SomeProtocol {
func getData() -> String {
return "Hello"
}
}
Ora voglio che ogni UIViewController
avere una proprietà chiamata source
, così ho può fare qualcosa come ...
class MyViewController : UIViewController {
override func viewDidLoad() {
self.title = source.getData()
}
}
Per realizzare questo, creo un protocollo per d efine la proprietà:
protocol SomeProtocolInjectable {
var source: SomeProtocol! { get set }
}
Ora ho solo bisogno di estendere il controller della vista con questa proprietà:
extension UIViewController: SomeProtocolInjectable {
// ???
}
Come posso incidere insieme una proprietà memorizzato che funzionerà con un tipo di protocollo?
Che cosa non ha funzionato:
var source: SomeProtocol!
, ovviamente, non funziona perché le estensioni non hanno proprietà memorizzate- non posso use Objective-C associated objects perché un protocollo non è un oggetto
- I impossibile wrap it in a class (funziona per altri tipi di valore, ma non per i protocolli)
Altri suggerimenti?
L'utilizzo di una proprietà statica può funzionare? –
Questa è una buona soluzione, ma idealmente i diversi controller di visualizzazione avrebbero diversi 'source's. Se vuoi lasciarlo come risposta, lo accetterò in un giorno o due se non c'è niente di meglio. –
Vedere la mia risposta qui sotto - è possibile ottenere diversi 'sorgenti' per istanza usando un tipo * proxy * ... –