下面的脚本是用Swift 5编写的,我做错了一些事情来配置泛型。
基本上,它是一个带有函数的Foo协议,带有一个带有泛型类型的参数,它在Fez和Foz中实现,其中bar函数的类型是在类定义中定义的。通过使用associatedtype可以修复这个问题吗?
知道什么可以是什么以及如何解决它吗?我在仿制药的设置上做错什么了吗?我需要同时支持Int和String。
protocol Foo {
func bar<T>(zed: T)
}
class Fez: Foo {
private var zed: Int = 0
func bar<Int>(zed: Int) {
self.zed = zed //Cannot assign value of type 'Int' to type 'Swift.Int'
}
}
class Foz: Foo {
private var zed: String = ""
func bar<String>(zed: String) {
self.zed = zed //Cannot assign value of type 'String' to type 'Swift.String'
}
}非常感谢。
:希望你今天过得愉快。
发布于 2019-12-10 19:03:43
像这样的泛型表示调用方可以选择传递给bar的任何类型,并且实现将处理它。您的意思是,实现可以决定可以传递哪种类型,这是您建议的关联类型。
protocol Foo {
associatedtype Zed
func bar(zed: Zed)
}
class Fez: Foo {
private var zed: Int = 0
func bar(zed: Int) {
self.zed = zed
}
}
class Foz: Foo {
private var zed: String = ""
func bar(zed: String) {
self.zed = zed
}
}https://stackoverflow.com/questions/59273750
复制相似问题