首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于协议的Hashable协议

用于协议的Hashable协议
EN

Stack Overflow用户
提问于 2017-02-20 03:10:41
回答 1查看 1.5K关注 0票数 0

我想知道下面的代码出了什么问题?

代码语言:javascript
复制
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协议?

EN

回答 1

Stack Overflow用户

发布于 2017-02-20 03:18:33

==要求lhsrhs的类型相同。拥有两个类型的DataEntry是不够的,因为您可以将lhs设置为FooDataEntry,将rhs设置为BarDataEntry

为了加强lhsrhs之间的这种关系,您需要使用泛型。

代码语言:javascript
复制
func ==<T: DataEntry>(lhs: T, rhs: T) -> Bool {
    return lhs.idx == rhs.idx
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42331607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档