我看到很多关于类型删除的文章。但他们的大多数示例都侧重于将不同类型放入数组中。
有什么方法可以让这段代码正常工作吗?
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”只能用作通用约束,因为它具有 Self 或关联类型要求
此示例代码仅用于演示目的。
最佳答案
从 Swift 4 开始,具有关联类型要求的协议(protocol)只能用作函数声明中的通用约束,如:
func foo<T: A>(t: T) where A.Data: Whatever { ... }
除非您从协议(protocol)中删除关联类型,否则您不能只向其键入变量;您只能使用它来定义通用类型。
如果 Swift 在未来获得了泛化存在的能力,那么这可能会改变。但目前,这在 Swift 中是不可能的。
关于swift - 如何使用 if-let 在 Swift 中进行类型删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46989983/