Swift - 通用函数参数

JEL*_*JEL 3 generics xcode swift swift-protocols

我正在尝试这样做:

protocol Fly {
}

class Bird: Fly {
}

func fetch<T: Fly>(model: T) {
    print("Done")
}

let bird: Fly = Bird()
fetch(model: bird)
Run Code Online (Sandbox Code Playgroud)

但是我收到这个错误:

无法使用类型为“(模型:Fly)”的参数列表调用“获取”

我设置let bird: Fly = Bird()为 type Fly,它不应该工作,因为该函数fetch采用任何符合该协议的对象吗?

有什么想法吗?

Pra*_*iya 5

您正在使用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)
Run Code Online (Sandbox Code Playgroud)

  • 我知道这一点,但是如果函数接受任何符合“Fly”的实例,为什么我不能拥有这个 `letbird: Fly = Bird()` 并将其传递给函数? (2认同)
  • `letbird: Fly = Bird()` 非常好。我不认为这是这里的问题。 (2认同)