ios – 由其他通用参数约束的通用参数

前端之家收集整理的这篇文章主要介绍了ios – 由其他通用参数约束的通用参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
由于斯威夫特缺乏协方差,我需要一些解决方法.我来自 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的一个功能,并且永远不会像我想的那样工作?

解决方法

如果你想通过任何工厂< T>其中T是AnyObject类型,你只需要写:
init(childFactory: Factory<T>) {
    factoryClosure = { () -> T in
        return otherFactory.create()
    }
}

因为T会被你的班级自动约束.

原文链接:https://www.f2er.com/iOS/333436.html

猜你在找的iOS相关文章