物业压倒一切迅速

时间:2015-11-24 10:10:51

标签: swift

我的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属性的类型?

2 个答案:

答案 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解决方案