我已经定义了这样的协议:
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属性?
答案 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可见。