Swift-指定是否符合通用类型参数的协议

问题描述 投票:0回答:1

我想做的是有两个泛型类型参数,其中一个是特定类型,另一个是类似的协议:

@propertyWrapper
struct Implementation<T, P> where T : AnyObject, T : P { // Compiler error

    var wrappedValue: P { projectedValue }

    var projectedValue: T

    init(_ instance: T) {
        self.projectedValue = instance
    }

}

这样,可以隐藏实际类型,并且只暴露协议。

现在这不起作用,因为P是非类,非协议类型,所以T不能局限于此。

有没有解决的办法?

swift generics swift-protocols property-wrapper
1个回答
0
投票

我认为您可以为T创建一个要继承的协议,那么您根本就不需要P:

protocol ImplementationProtocol: AnyObject {}

@propertyWrapper
struct Implementation<T: ImplementationProtocol> { 

    var wrappedValue: ImplementationProtocol { projectedValue }

    var projectedValue: T

    init(_ instance: T) {
        self.projectedValue = instance
    }

}

现在,当您在上面的代码中尝试完成时,现在“ T”必须符合“ ImplementationProtocol”,“ wrappedValue”也必须符合“ ImplementationProtocol”。

希望有帮助

© www.soinside.com 2019 - 2024. All rights reserved.