我的DataSource
协议包含data
Any
类型的protocol DataSource {
var data: Any? { get }
}
属性:
class IntDataSource: DataSource {
var data: Int?
}
然后我想用一个将数据类型限制为某种类型的类来实现这个协议:
Int
但编译器声称它不符合协议,但Any
符合 <select class='form-control' name='state' id='state' ng-model='AddqueryArr.state' required='required' ng-change='getCity(AddqueryArr.state)'>
<option></option>
<option ng-repeat='state in State.json' value='{{state.id}}'>{{state.name}}</option>
</select>
类型。
为什么我不能覆盖swift属性的类型?
答案 0 :(得分:4)
应该几乎总是避免使用类似__mro__
的通配符类型,并且更喜欢使用swift类型系统的通用解决方案。
__mro__
Swift允许__mro__
object
完全解决您遇到的问题。由于它的类型推断,通常明确定义抽象类型是不必要的(在这种情况下,super
的具体类型是从type
推断出来的。)
答案 1 :(得分:1)
DataType
答案的可能变体可能是使用通用函数解决它。
protocol DataSource {
func getData<T> () -> [T]
}
class IntDataSource<Int>: DataSource {
func getData<Int>() -> [Int] {
let data:[Int] = [1, 1, 2, 3]
return data
}
}
仅仅是为了琐事,我认为你应该使用DataType
解决方案