Swift:使用Protocol实例调用泛型函数

时间:2017-09-07 19:31:01

标签: swift generics

我试图理解为什么用协议实例调用泛型函数会导致编译错误。给出以下代码:

public protocol MyProtocol {}
public class MyClass: MyProtocol {}

public func myFunc<T: MyProtocol>(_ foo: T) -> T {
    return foo
}

public func test() {
    let foo: MyClass = MyClass()
    let bar: MyProtocol = foo

    myFunc(foo)  // ok
    myFunc(bar)  // compile error
}

编译器因此失败:cannot invoke 'myFunc' with an argument list of type '(MyProtocol)'语句上的myFunc(bar)

MyProtocol声明为@objc允许该示例进行编译(大概是因为它导致MyProtocol在幕后成为某种具体类型,或者什么?)。

为什么在Swift中不允许这样做,并且有一个更好的解决方法而不是@objc - 如果我的协议?

0 个答案:

没有答案