zrobię Protokół:Swift przechowywania rozszerzenie dla protokołów
protocol SomeProtocol {
func getData() -> String
}
robię struct zgodnego z nim:
struct SomeStruct: SomeProtocol {
func getData() -> String {
return "Hello"
}
}
teraz chcę za każdym UIViewController
mieć właściwość o nazwie source
, więc może zrobić coś takiego ...
class MyViewController : UIViewController {
override func viewDidLoad() {
self.title = source.getData()
}
}
Aby to osiągnąć, tworzę protokół do d efine właściwość:
protocol SomeProtocolInjectable {
var source: SomeProtocol! { get set }
}
Teraz wystarczy przedłużyć kontroler widok z tej właściwości:
extension UIViewController: SomeProtocolInjectable {
// ???
}
Jak mogę włamać razem zapisaną właściwość, że będzie pracować z typem protokołu?
Co nie działa:
var source: SomeProtocol!
oczywiście nie działa, ponieważ nie mają rozszerzenia zapisane właściwości- nie mogę use Objective-C associated objects ponieważ protokół nie jest obiektem
- I nie może wrap it in a class (działa to dla innych typów wartości, ale nie dla protokołów)
Jakieś inne sugestie?
Czy będziesz używać statycznej nieruchomości do pracy? –
To dobre rozwiązanie, ale idealnie różne kontrolery widoku miałyby różne "źródła". Jeśli chcesz zostawić to jako odpowiedź, przyjmuję to za dzień lub dwa, jeśli nie przyjdzie nic lepszego. –
Zobacz moją odpowiedź poniżej - możesz osiągnąć różne "źródło" na wystąpienie używając jakiegoś * proxy * typu ... –