gpt4 book ai didi

swift - 协议(protocol)实现与继承

转载 作者:搜寻专家 更新时间:2023-11-01 07:20:33 27 4
gpt4 key购买 nike

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

protocol IMessage { }

class Message: IMessage { }

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

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

使用这段代码,我得到了错误 « Type 'Conversation' does not conform to protocol IConversation »

最佳答案

问题在于 IMessageMessage 类型之间的差异。 IConversation 协议(protocol)期望您能够将任何类型的 [IMessage] 分配给属性 messages 变量,而不仅仅是大小写 [Message] 。多一类的简单示例:

class OtherMessage: IMessage { }

通过协议(protocol)声明,您应该能够将类型为 [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

关于swift - 协议(protocol)实现与继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39344211/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com