gpt4 book ai didi

swift - Swift协议(protocol)如何符合类型参数协议(protocol)

转载 作者:行者123 更新时间:2023-11-30 13:56:37 24 4
gpt4 key购买 nike

我有以下非常简单的 Swift 2.0 代码

protocol PA {
init(handle:Int)
}

class CB: PA {
required init(handle:Int) {}
}

class X {
func test<U:PA>() -> U {
return U(handle: 1)
}
}

class ThisFails {
func foo() -> PA {
return X().test()
}
}

但它无法编译并出现相当奇怪的错误消息

swift:23:20: error: generic parameter 'U' could not be inferred return X().test()

我希望将 U 推断为 PA 类型

将方法 foo 的返回类型更改为 CB 可以使其工作,但我有许多实现 PA 协议(protocol)的类,因此这对我不起作用。

类似地,从 U:PA 中删除 PA 约束,编译器将其推断为 foo 内的 PA 类型,但我需要在 test 内调用约束,这样对我没有帮助要么。

最佳答案

嗯...错误消息中已经清楚地说明了问题!要点是您使用泛型声明了一个函数,并且泛型类型对协议(protocol)有约束。然后使用泛型 U... 编写方法 test(),这意味着当您实际使用该方法时,编译器必须清楚要由 test() 实例化并返回的符合协议(protocol) PA 的实际类型是什么。在函数 foo 中,这并不清楚......当从未提及时,你怎么能期望 test 返回 CB 呢?尝试:

X().test<CB>()

关于swift - Swift协议(protocol)如何符合类型参数协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33543328/

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