gpt4 book ai didi

swift - 为什么 Swift 中的类型推断不处理传递约束?

转载 作者:行者123 更新时间:2023-11-28 08:20:02 25 4
gpt4 key购买 nike

修补 this question ,我想到了这个:

class AllTogether<T: FooProtocol> {
func createContainer<U: T>(data: U){
Container<T>(someDataConformingFooProtocol: data)
}
}

我的理解是,如果我们将 FooProtocol 设为类协议(protocol),这应该可行:

protocol FooProtocol: class { ... }

但是,我们仍然会遇到错误:

Error: inheritance from non-protocol, non-class type 'T'
Error: argument type 'U' does not conform to expected type 'FooProtocol'

这两条消息似乎都是错误的。我错过了什么?

子类型关系在 Swift 中是不可传递的吗?

最佳答案

该函数添加了一个不必要的附加关系。

容器正在寻找一个类型为 T 的对象进行初始化。

如果 U 是 T 的子类,那么任何可以调用的东西

func createContainer<U: T>(data: U)

也可以调用

func createContainer(data: T)

所以基本上这个函数正在做的事情看起来应该是可能的(并且可能在某个时候是可能的。Swift 的泛型将被彻底检查/改进)但无论如何它是没有意义的。

只需改用它:

func createContainer(data: T){
Container<T>(someDataConformingFooProtocol: data)
}

关于swift - 为什么 Swift 中的类型推断不处理传递约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41596617/

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