我看到很多关于类型擦除的文章。但是他们的大部分例子都集中在将不同的类型放入数组中。
有什么方法可以让这段代码起作用吗?
protocol A {
associatedtype Data
func printThis(value: Data)
}
class B {
}
let x = B()
if let y = x as? A { // I get error on this line
// Do nothing
}
Xcode错误状态
Protocol 'A' can only be used as a generic constraint because it has Self or associated type requirements
此示例代码仅用于演示目的。
答案 0 :(得分:2)
从Swift 4开始,具有关联类型要求的协议只能 在函数声明中用作通用约束,如:
func foo<T: A>(t: T) where A.Data: Whatever { ... }
除非从协议中删除关联类型,否则不能只为其键入变量;您只能 使用它来定义泛型类型。
如果斯威夫特在将来获得了普遍存在的能力,那么这可能会改变。但就目前而言,这在Swift中是不可能的。