swift - 快速覆盖属性

标签 swift

我有一个 DataSource 协议(protocol),它包含 Any 类型的 data 属性:

protocol DataSource {
    var data: Any? { get }
}

然后我想用一个将数据类型限制为某种类型的类来实现这个协议(protocol):

class IntDataSource: DataSource {
    var data: Int?
}

但是编译器声称它不符合协议(protocol),但是Int符合Any类型。

为什么我不能覆盖 swift 属性的类型?

最佳答案

几乎总是应该避免使用像 Any 这样的通配符类型,而更喜欢使用通用解决方案,利用 swift 的类型系统。

protocol DataSource {
  typealias DataType
  var data: DataType? { get }
}

class IntDataSource: DataSource {
  var data: Int?
}

Swift 允许 associated type protocol 来准确解决您遇到的问题。由于它的类型推断,通常不需要显式定义抽象类型(在这种情况下,DataType 的具体类型是从 var data: Int? 推断出来的)。

关于swift - 快速覆盖属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33890785/

相关文章:

swift - 查找 App Group 路径时返回 nil

ios - UIButton 以相等的宽度快速延伸超过 UIView 的边缘

swift - 在 Swift 中从字符串创建新字符

ios - swift: UIPageViewController 大小

objective-c - 如何在 ios 中实现类似 android 的长时间运行的任务

ios - 如何在 Swift Playground 中使用 STDIN

ios - 圆形背景 View 不会使内部 View 变圆

ios - 使用 Swift 通过蓝牙发送消息

ios - 快速减去时间

ios - 如何使用 Firestore 订购数据以在 iOS 上显示