加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用自定义类类型作为Swift中Dictionary的键?

发布时间:2020-12-14 05:30:51 所属栏目:百科 来源:网络整理
导读:我正在研究一个使用 Swift构建的项目,我正在尝试创建一个字典来存储一个名为Pixel的自定义类的对象(KEY,用于存储RGB值等颜色信息)和int值(Value,用于计算多少相同颜色出现在同一图像上的次数). 如果这是在C#中,则工作代码应为: 字典 Pixel,int colorDiction
我正在研究一个使用 Swift构建的项目,我正在尝试创建一个字典来存储一个名为Pixel的自定义类的对象(KEY,用于存储RGB值等颜色信息)和int值(Value,用于计算多少相同颜色出现在同一图像上的次数).

如果这是在C#中,则工作代码应为:

字典< Pixel,int> colorDictionary = new Dictionary< Pixel,int> ();

在Swift中,我尝试过:

var colorDictionary = Dictionary<Pixel,Int>()

但是,我得到的错误:

“Type ‘Pixel’ does not conform to protocol ‘Hashable'”

我该怎么做才能解决这个问题?非常感谢!

要使用字典键的任何自定义类型都必须符合 Hashable协议.

此协议有一个必须实现的属性.

var hashValue:Int {get}

使用此属性可生成Dictionary可用于查找原因的int.您应该尝试使其生成的hashValue对于每个像素都是唯一的.

Swift书中有以下注释,因此您可以创建一个随机哈希(只要它是唯一的):

The value returned by a type’s hashValue property is not required to be the same across different executions of the same program,or in different programs.

请注意,因为Hashable继承自Equatable,您还必须实现:

func ==(_ lhs: Self,_ rhs: Self) -> Bool.

我不确定像素的内部结构是什么,但是当两者具有相同的“x”和“y”值时,你可能会认为两个像素相等.最后的逻辑取决于你.

根据需要修改:

struct Pixel : Hashable {

    // MARK: Hashable
    var hashValue: Int {
        get {
            // Do some operations to generate a unique hash.
        }
    }
}

//MARK: Equatable
func ==(lh: Pixel,rh: Pixel) -> Bool {
    return lh.x == rh.x && rh.y == lh.y
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读