我有两个协议和两个实现它们的类如下:
protocol IMessage { }
class Message: IMessage { }
protocol IConversation {
var messages: [IMessage] { get set }
}
class Conversation: IConversation {
var messages: [Message] = []
}
使用此代码,我收到错误«Type'Conversation'不符合协议IConversation»
答案 0 :(得分:1)
您的邮件类型不匹配。您的协议需要messages
类型的[IMessage]
。您已使用[Message]
在课堂上声明该内容。
答案 1 :(得分:1)
问题在IMessage
和Message
类型之间存在差异。 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
。