Swift 协议实现与继承
我有两个协议和两个类实现它们,如下所示:Swift 协议实现与继承,swift,Swift,我有两个协议和两个类实现它们,如下所示: protocol IMessage { } class Message: IMessage { } protocol IConversation { var messages: [IMessage] { get set } } class Conversation: IConversation { var messages: [Message] = [] } 使用此代码,我得到错误«类型“对话”不符合协议IConversation
protocol IMessage { }
class Message: IMessage { }
protocol IConversation {
var messages: [IMessage] { get set }
}
class Conversation: IConversation {
var messages: [Message] = []
}
使用此代码,我得到错误«类型“对话”不符合协议IConversation»您的消息类型不匹配。您的协议需要类型为
[IMessage]
的消息。您正在使用[Message]
在类中声明它问题在于IMessage
和Message
类型之间存在差异IConversation
协议期望您能够使用任何类型的[IMessage]
为属性消息
变量赋值,而不仅仅是大小写[Message]
。还有一个类的简单示例:
class OtherMessage: IMessage { }
通过协议声明,您应该能够将类型为[OtherMessage]
的变量分配给消息
,并且类会话
不允许这样做。修复它:
class Conversation: IConversation {
var messages: [IMessage] = []
}
更新:如果需要使用消息
类型,可以使用以下解决方案:
class Conversation: IConversation {
var messages: [IMessage] {get{return _messages}set{_messages = newValue as! [Message]}}
var _messages: [Message] = []
}
并在课堂内处理\u消息
请不要更改您帖子中的声明,这会导致书面答案出现问题。谢谢您的回答。因此,如果我的类对话
仅用于消息
,我所能做的就是检查类型,如果是IMessage
的另一个实现,则抛出一个错误?@Morniak基本上是的。您可以在类中使用其他属性(检查更新)。这个问题也可能是相关的