ios - swift 中的静态字典类型变量声明?

标签 ios iphone swift

我一直在尝试在“结构”中声明一个静态字典。但是,我无法做到这一点。它给了我“Type 'BagItem' does not conform to protocol 'Hashable'”

我的代码在这里:

struct StaticBag {

    static var bag: Dictionary<BagItem, Array<BagItem>> = Dictionary<BagItem, Array<BagItem>>()

//    static func AddMainItem(item: BagItem)
//    {
//        self.bag[item] = Array<BagItem>()
//    }
}

代码中的'BagItem' 是我的另一个全局类。 声明此变量的正确和最佳方法是什么?

谢谢你的回答

最好的问候

最佳答案

正如它所说,问题是您的自定义 BagItem 类型不符合 Hashable 协议(protocol)。字典键需要是可哈希的,因为字典使用哈希值来快速查找条目。

BagItem 是什么样子的?是否有一个已经可散列的唯一属性?如果是这样,您可以通过添加 hashValue 属性并实现 == 运算符来添加 Hashable 一致性:

class BagItem : Hashable {
    var uniqueID: Int = 0
    var hashValue: Int { return uniqueID.hashValue }
}

func ==(lhs: BagItem, rhs: BagItem) -> Bool {
    return lhs.uniqueID == rhs.uniqueID
}

关于ios - swift 中的静态字典类型变量声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26078418/

相关文章:

iphone - UDID 替换?

iphone - 在 iPad mini 中使用语音听写时 100% iPhone 应用程序崩溃

swift - 如何让函数接受字符串或字符串数​​组?

ios - 如何通过 SKScene 播放视频

ios - 如何设置我们保存在文档目录中的图像名称

iOS 打开带有查询的 YouTube 应用程序(url 方案)

ios - 使用未解析的标识符 PFFacebookUtils

ios - 带有 NSAttributedString(s) 的简单 UIAlertView

ios - NSURLSession上传任务不调用completionHandler

swift - (Swift) 如何更改单元格外的标签文本(事件发生的地方)?