我有一个 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/