如何使用自定义类类型作为Swift中Dictionary的键?
我正在研究一个使用
Swift构建的项目,我正在尝试创建一个字典来存储一个名为Pixel的自定义类的对象(KEY,用于存储RGB值等颜色信息)和int值(Value,用于计算多少相同颜色出现在同一图像上的次数).
如果这是在C#中,则工作代码应为: 字典< Pixel,int> colorDictionary = new Dictionary< Pixel,int> (); 在Swift中,我尝试过: var colorDictionary = Dictionary<Pixel,Int>() 但是,我得到的错误:
我该怎么做才能解决这个问题?非常感谢!
要使用字典键的任何自定义类型都必须符合
Hashable 协议.
此协议有一个必须实现的属性. var hashValue:Int {get} 使用此属性可生成Dictionary可用于查找原因的int.您应该尝试使其生成的hashValue对于每个像素都是唯一的. Swift书中有以下注释,因此您可以创建一个随机哈希(只要它是唯一的):
请注意,因为Hashable继承自 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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Swift 中的内存管理详解
- c – Clang格式将语句体分成多行
- ios – 找不到头文件
- c# – 如何在剃刀视图中将@model指令更改为其他模型?
- visual-c – 使用MSVC9.0构建时是否需要使用WS2_32.dll而不
- An Introduction To The SQLite C/C++ Interface
- 在KEIL realview MDK下为单一C文件生成.LIB文件
- ruby-on-rails – Rails&Oauth:多个提供商
- c# – 同时使用[FromUri]和[FromBody]绑定复杂的Web Api方法
- c# – NHibernate Evict按类型而不是实例