gpt4 book ai didi

Swift 在协议(protocol)中使用泛型

转载 作者:行者123 更新时间:2023-11-28 07:30:00 24 4
gpt4 key购买 nike

为了快速开发,我制作了名为 MessageSocket 的协议(protocol)。

接下来是一个真实的实现和一个模拟的实现。代码在这里:

// Procotols
protocol Message {

}

protocol Socket {
associatedtype T: Message
var messages: [T] { get }
}

// Real implementation
class RealMessage: Message {

}

class RealSocket: Socket {
private(set) var messages: [RealMessage] = []
}

// Mocks
class MockMessage: Message {

}

class MockSocket: Socket {
private(set) var messages: [MockMessage] = []
}

class VC {
// Error here: Protocol 'Socket' can only be used as a generic constraint because it has Self or associated type requirements
var socket: Socket = MockSocket()

// The only way I know to solve this is using the codes below:
// var socket: MockSocket = MockSocket()
}

我的期望:

由于我有两套套接字,我希望我可以在模拟和真实环境之间切换,这对于开发和调试来说非常好。

但是VC 有一个错误,这让我无法完成。

如有任何帮助,我们将不胜感激。

最佳答案

不要尝试以这种方式使用通用协议(protocol)。您可以使用普通协议(protocol)或类以获得继承,或者如果通用部分很重要,则可以使用通用类。但是具有泛型关联类型的协议(protocol)本身并不是一种类型。

关于Swift 在协议(protocol)中使用泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55174607/

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