gpt4 book ai didi

swift - 在 Swift 中继承泛型类失败

转载 作者:搜寻专家 更新时间:2023-10-31 22:43:18 26 4
gpt4 key购买 nike

我是泛型编程的新手,我对 Swift 3 和泛型类的子类化有疑问。我已将其全部简化为一个失败的简单案例,希望有人能帮助解释我失败的原因。

使用以下协议(protocol)和类,一切正常。这行得通(我的真实代码还有很多事情要做,但工作正常):

protocol P {
associatedtype T
}

class Temp<X> {}
class C1<D:P> {
init(tmp: Temp<D.T>) {}
}

但是,当我按如下方式子类化时:

class C2<L:P> : C1<L> {}

我得到这个编译器失败:

<unknown>:0: error: expression type 'Temp<_>' is ambiguous without more context

错误不在特定行,而是出现在编译器事件日志中的故障。

也许我缺少一些简单的东西,但我就是看不到它。我的子类具有与基类相同的约束(即它必须采用协议(protocol) P),因此在我看来这应该可行。

有什么想法吗?

最佳答案

我首先要说的是,我无法弄清楚您的问题发生的原因,但我希望这能以某种方式帮助您

让我们从C1 类开始。

class C1<D: P> {}

通过使用它,一切正常。所以我想确保通用参数可以在 C1C2 中使用,实际上它可以

class C1<D: P> {
// it compiles
let something: D.T? = nil

// it compiles
func doSomething(using parameter: D.T) {
}

// do not compile
init(_ some: D.T) {
}
}

最后,如果您覆盖C2 类中的init,代码最终会编译通过。我认为这实际上可能是一个编译器问题,我会尝试为此提交雷达。我实际上不知道还能尝试什么。

关于swift - 在 Swift 中继承泛型类失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42711540/

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