具有关联类型的协议对可选项不起作用

时间:2016-03-25 21:44:46

标签: swift

这有效:

protocol Inconceivable {
    associatedtype AbstractType
    func say(it: AbstractType)
}

class Vizzini: Inconceivable {
    func say(theWord: String) {
        print(theWord)
    }
}

Vizzini().say("Inconceivable!")

但是,修改协议以使用可选前缀:

@objc protocol Inconceivable {
    associatedtype AbstractType
    optional func say(it: AbstractType)
}

它不再起作用了:

  

错误:因为类型,方法不能是@objc协议的成员   参数的大小不能用Objective-C表示       可选的func说(它:AbstractType)

有解决方法吗?

1 个答案:

答案 0 :(得分:3)

可选部分本身不是问题,它是@objc的问题。关联类型是协议的通用组件,而且目标-c没有泛型,因此您无法使用它们导出协议。您可以解决的唯一方法是更改​​协议。

相关问题