gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:32:25 27 4
gpt4 key购买 nike

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

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

是否可以编写一个协议(protocol)扩展,其中 SelfCollection 的一个实例?

尝试使用采用泛型的类来扩展协议(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/36426006/

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