2016-07-31 1 views
1

Я определил протокол следующим образом:СООТВЕТСТВИЕ к протоколу Swift - «Значение типа XX не имеет член YY»

protocol Coordinator: NSObjectProtocol { 
    var configurationStyle: ContainerConfigurationStyle { get } 
} 

Теперь я пытаюсь реализовать это следующим образом:

class StoreCoordinator: NSObject, Coordinator { 
    required init(withObject object: MyObject, style: ContainerConfigurationStyle) { 
      self.object = object 
      self.configurationStyle = style 
} 

Это дает мне ошибку компилятора: «StoreCoordinator does not member configurationStyle. Почему это?

Как я могу обеспечить, чтобы мой объект имел свойство configurationStyle, используя быстрый протокол?

+1

Вы внедрили свойство 'configurationStyle' в свой класс' StoreCoordinator'? – Hamish

+0

Это то, что я пытаюсь сделать, когда я это делаю: 'self.configurationStyle = style' –

+0

ah Я думаю, вы все равно должны объявить его в классе разработчика –

ответ

0

Как я могу применять, что мой объект имеет свойство configurationStyle, используя быстрый протокол?

Протокол - это всего лишь перечень требований. Чтобы принять протокол, вы должны соблюдать его формальные требования.

В вашем протоколе говорится: «Чтобы принять меня, тип должен объявить var configurationStyle: ContainerConfigurationStyle». Вы этого не делаете. Вы бы сделали это следующим образом:

class StoreCoordinator: NSObject, Coordinator { 
    var configurationStyle: ContainerConfigurationStyle 
    // ... and so on 
} 

Протокол не обладает магическими «инъекционными» полномочиями. Возможно, вы думаете о расширении? Вы можете использовать расширение протокола, но предупреждайте, что тогда ваше свойство не будет видимым для Objective-C.

1

С кодом, который у вас есть сейчас, нет необходимости в протоколе. Вместо этого просто сделайте configurationStyle недвижимостью вашего StoreCoordinator класса.

class StoreCoordinator: NSObject { 
    var configurationStyle: ContainerConfigurationStyle! 
    required init(withObject object: MyObject, style: ContainerConfigurationStyle) { 
      self.object = object 
      self.configurationStyle = style 
} 
Смежные вопросы