这有效:
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)
有解决方法吗?
答案 0 :(得分:3)
可选部分本身不是问题,它是@objc的问题。关联类型是协议的通用组件,而且目标-c没有泛型,因此您无法使用它们导出协议。您可以解决的唯一方法是更改协议。