swift - 如何使用 if-let 在 Swift 中进行类型删除?

标签 swift

我看到很多关于类型删除的文章。但他们的大多数示例都侧重于将不同类型放入数组中。

有什么方法可以让这段代码正常工作吗?

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/

相关文章:

ios - 如何在 Swift 中动态设置 UITableView 高度?

swift - 在主线程上使用 NSLock 安全吗?

ios - iOS 中的 UndoManager 持久化

ios - 使用 Alamofire 解析 json 的问题

ios - 类中的类型别名与 swift 中函数中的类型别名 (iOS)

ios - 我无法使用 swift 3.0 编辑数据并将其保存到核心数据?

ios - 从设备中删除应用程序时删除与应用程序相关的下载

ios - 如何在 ios 中显示指向应用程序沙箱的文件选择器?

swift - -canOpenURL : failed for URL: "about:blank" - error: "This app is not allowed to query for scheme about"

ios - 如何在 iOS swift 中集成 Google Pay?