符合Swift协议 - ' XX类型的值没有成员YY'

时间:2016-07-31 22:03:06

标签: swift

我已经定义了这样的协议:

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没有成员configurationStyle。这是为什么?

如何使用swift协议强制我的对象具有configurationStyle属性?

2 个答案:

答案 0 :(得分:1)

使用您现在拥有的代码,不需要协议。相反,只需将configurationStyle作为StoreCoordinator类的属性。

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

答案 1 :(得分:0)

  

如何使用swift协议强制我的对象具有configurationStyle属性?

协议只是一个要求列表。要采用该协议,您必须遵守其正式要求。

你的协议说"要采用我,类型必须声明var configurationStyle: ContainerConfigurationStyle。"你不是那样做的。你会这样做:

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

协议没有魔法"注射"权力。也许你在考虑扩展?您可以使用协议扩展,但要注意,然后您的属性将不会对Objective-C可见。