gpt4 book ai didi

ios - 泛型参数受其他泛型参数约束

转载 作者:IT王子 更新时间:2023-10-29 05:53:57 25 4
gpt4 key购买 nike

由于 Swift 缺乏协方差,我需要一些解决方法。我来自 Java 世界,所以我本能地尝试创建从一种类型到其他泛型类型的约束。

所以我写了下面的类:

class Factory<T: AnyObject> {
let factoryClosure: () -> T

init(closure: () -> T) {
factoryClosure = closure
}

init<CHILD: T>(childFactory: Factory<CHILD>) {
factoryClosure = { () -> T in
return otherFactory.create()
}
}

func create() -> T {
return factoryClosure()
}
}

我希望它能正常工作。我有 T定义和 CHILD应该是 T 的子类.然而,Swift 编译器不同意并在 init<CHILD: T> 行显示以下错误.

Inheritance from non-protocol, non-class type 'T'

我也在不同的场景中尝试了泛型参数继承。将以下方法添加到类中(并删除导致编译错误的 init)。

func to<OTHER where OTHER: AnyObject, T: OTHER>() {

}

这会产生基本相同的输出。

Type 'T' constrained to non-protocol type 'OTHER'

我认为可能有效的任何方法都无效,并以类似的错误消息结束。这是 swift 的一个错误吗?或者我错过了什么?或者它是 Swift 的一个特性,永远不会像我想象的那样工作?

最佳答案

如果你想传递任何Factory<T>其中 T类型为 AnyObject你只需要写:

init(childFactory: Factory<T>) {
factoryClosure = { () -> T in
return otherFactory.create()
}
}

因为 T 自动受到您的类的约束。

关于ios - 泛型参数受其他泛型参数约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30417934/

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