协议实现和继承

时间:2016-09-06 08:31:07

标签: swift

我有两个协议和两个实现它们的类如下:

protocol IMessage { }

class Message: IMessage { }

protocol IConversation {
    var messages: [IMessage] { get set }
}

class Conversation: IConversation {
    var messages: [Message] = []
}

使用此代码,我收到错误«Type'Conversation'不符合协议IConversation»

2 个答案:

答案 0 :(得分:1)

您的邮件类型不匹配。您的协议需要messages类型的[IMessage]。您已使用[Message]在课堂上声明该内容。

答案 1 :(得分:1)

问题在IMessageMessage类型之间存在差异。 IConversation协议期望您能够使用任何类型messages分配属性[IMessage]变量,而不仅仅是案例[Message]。一个简单的例子,还有一个类:

class OtherMessage: IMessage { }

通过协议声明,您应该能够将[OtherMessage]类型的变量分配给messages,而类Conversation不允许这样做。解决它:

class Conversation: IConversation {
    var messages: [IMessage] = []
}

更新:如果您需要使用Message类型,则可以使用此解决方案:

class Conversation: IConversation {
    var messages: [IMessage] {get{return _messages}set{_messages = newValue as! [Message]}}
    var _messages: [Message] = []
}

并在课堂内使用_messages