协议中定义的var不符合多个协议

时间:2018-10-25 15:00:26

标签: swift class protocols swift-protocols conform

我在Swift的协议中苦苦挣扎。 我已经定义了这样的协议:

protocol AProtocol {
    var property : BProtocol {get set}
}

我想在具有属性且也符合其他协议的类中遵守AProtocol。我尝试了以下两种方式:

class AClass: AProtocol {
   var property = BClass()
}

和:

class AClass: AProtocol {
   var property: BProtocol & MyBClassType = BProtocol()
}

但它们似乎都不起作用(BClass本身向BProtocol确认) 这个问题有点难以解释,我希望这很清楚。

这是Swift语言的局限性吗? 您知道解决这个问题的方法吗?

1 个答案:

答案 0 :(得分:1)

您有两个问题:首先,属性名称必须与协议中声明的属性名称匹配;其次,您需要输入注释类型为BProtocol的变量,如Hamish在评论中所述。

protocol AProtocol {
    var aProperty : BProtocol {get set}
}

protocol BProtocol {}
class BClass: BProtocol {}

class AClass: AProtocol {
    var aProperty: BProtocol = BClass()
}

您还应该遵循Swift命名约定,即变量名称的lowerCamelCase,因此我将AProperty更改为正确的格式aProperty