Swift - 泛型函数参数
Swift - Generic function parameter
我正在尝试这样做:
protocol Fly {
}
class Bird: Fly {
}
func fetch<T: Fly>(model: T) {
print("Done")
}
let bird: Fly = Bird()
fetch(model: bird)
但是我得到这个错误:
Cannot invoke 'fetch' with an argument list of type '(model: Fly)'
我将 let bird: Fly = Bird()
设置为 Fly
类型,它不应该工作吗,因为函数 fetch
接受任何符合该协议的对象?
有什么想法吗?
您正在使用 Fly
对象创建 Bird
实例
替换代码
protocol Fly {
}
class Bird: Fly {
}
func fetch<T: Fly>(model: T) {
print("Done")
}
let bird: Bird = Bird() // Here is a problem
fetch(model: bird)
I set let bird: Fly = Bird()
to be of type Fly
, shouldn't it work since the function fetch takes any object that conforms to that
protocol?
fetch(model: bird)
调用的重载解析是在编译时静态完成的。 bird
实例已被明确注释为 类型 Fly
(这恰好是一个可以持有的协议,动态, 符合它的实例)。由于 ,对 fetch(model: bird)
的调用将不符合使用约束泛型方法 func fetch<T: Fly>(model: T)
的条件,因为 bird
的类型,即 Fly
,不满足类型约束 T: Fly
.
我正在尝试这样做:
protocol Fly {
}
class Bird: Fly {
}
func fetch<T: Fly>(model: T) {
print("Done")
}
let bird: Fly = Bird()
fetch(model: bird)
但是我得到这个错误:
Cannot invoke 'fetch' with an argument list of type '(model: Fly)'
我将 let bird: Fly = Bird()
设置为 Fly
类型,它不应该工作吗,因为函数 fetch
接受任何符合该协议的对象?
有什么想法吗?
您正在使用 Fly
对象创建 Bird
实例
替换代码
protocol Fly {
}
class Bird: Fly {
}
func fetch<T: Fly>(model: T) {
print("Done")
}
let bird: Bird = Bird() // Here is a problem
fetch(model: bird)
I set
let bird: Fly = Bird()
to be of typeFly
, shouldn't it work since the function fetch takes any object that conforms to that protocol?
fetch(model: bird)
调用的重载解析是在编译时静态完成的。 bird
实例已被明确注释为 类型 Fly
(这恰好是一个可以持有的协议,动态, 符合它的实例)。由于 fetch(model: bird)
的调用将不符合使用约束泛型方法 func fetch<T: Fly>(model: T)
的条件,因为 bird
的类型,即 Fly
,不满足类型约束 T: Fly
.