gpt4 book ai didi

swift - 扩展协议(protocol),其中 Self : Generic Type in Swift (Requires Arguments In <. ..>)

转载 作者:行者123 更新时间:2023-11-28 08:54:46 25 4
gpt4 key购买 nike

我有一个采用通用 class Collection: <T: Model> 的类(Model 是一个类)和一个协议(protocol)(Resource),Collection 的一些子类实现:

class Collection: <T: Model> {
typealias Callback = (result: Collection <T>) -> ()
}
protocol Resource {...}

是否可以在 Self 处编写协议(protocol)扩展?是 Collection 的实例?

尝试用采用泛型的类扩展协议(protocol):

extension Resource where Self: Collection {
func fetch() {}
}

给予:

Reference to generic type 'Collection' requires arguments in <...>

尝试扩展采用协议(protocol)泛型的类:

extension Collection where Self: Resource {
func fetch(callback: Callback?) {}
}

给予:

'Self' is only available in a protocol or as the result of method in a class

我不确定如何进行。目标是该函数仅在 Collection 的实例上可用。符合 Resource .

最佳答案

问题是Collection是一个泛型类,所以在你声明它的每个地方,你都必须附加专门的类型,比如 Collection<T> .但是,无法使用通用类型指定对协议(protocol)的扩展,因此您最终无法提供 TCollection .

虽然在你的情况下,T被限制为 Model 类型那么为什么不在默认协议(protocol)实现中使用它:

extension Resource where Self: Collection<Model> {
func fetch() {
// default implementation
}
}

关于swift - 扩展协议(protocol),其中 Self : Generic Type in Swift (Requires Arguments In <. ..>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33357346/

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