协议的可用协议

时间:2017-02-19 19:10:41

标签: generics swift3 protocols hashable equatable

我想知道以下代码有什么问题?

import Foundation

enum SliderType: Int {
    case analog = 1, discrete, highLow
}

protocol DataEntry: class, Hashable {

    var hashValue: Int { get set } // hashable protocol requires this
    var idx: Int { get set }
    var category: String { get set }
    var sliderType: SliderType { get set }
    var sliderTitle: String { get set }
    var sliderCurrentValue: Float { get set }
    var sliderMinValue: Float { get set }
    var sliderMaxValue: Float { get set }
}

func ==(lhs: DataEntry, rhs: DataEntry) -> Bool {
    return lhs.idx == rhs.idx
}

从此屏幕截图中可以看出,我一直收到错误Protocol 'DataEntry' can only be used as a generic constraint because it has Self or associated type requirements

有人知道这里可能有什么问题吗? 如何为协议实现Hashable协议?

enter image description here

1 个答案:

答案 0 :(得分:0)

==要求lhsrhs属于同一类型。如果DataEntry属于lhsFooDataEntryrhs,则两者都属于BarDataEntry类型是不够的。

您需要使用泛型来强制lhsrhs之间的这种关系。

func ==<T: DataEntry>(lhs: T, rhs: T) -> Bool {
    return lhs.idx == rhs.idx
}