我有一本字典(myDictionary),其中的键是自定义类型(M​​yClass),其中包括2个属性,名称和其他属性。我试图建立一个选择器数组,并意识到它可能会更复杂,因为我不能仅仅引用myDictionary.keys,因为这些键是我的自定义类。我希望选择器数组中填充MyClass的“名称”属性。

我了解到我的课程必须符合“哈希”协议,这可能与它有关,但是我有点菜鸟,对这个“哈希”协议也不是很了解。这是我所拥有的

class MyClass: Codable, Hashable {
    var name: String
    var other: MyEnumeration

    init(name: String, other: MyEnumeration) {
        self.name = name
        self.other = other
    }//end init


    //to conform to Hashable - I have NO IDEA what i'm doing here
    static func == (lhs: MyClass, rhs: MyClass) -> Bool {
        return lhs.name == rhs.name && lhs.other == rhs.other
    }

    //again i have no idea what i'm doing
    func hash(into hasher: input Hasher) {

    }

}//end MyClass

var myDictionary = [MyClass:String]()
//as you can see, the keys are the class I created

var pickerArray: [String] = myDictionary.keys.name.sorted() //this is wrong

//the pickerArray is what I want to do - access the "name" property of
//myclass and have it as my picker array options

最佳答案

由于要从字典的所有键中获取名称数组,因此可以执行以下操作:

var pickerArray = myDictionary.keys.map { $0.name }.sorted()


myDictionary.keys为您提供键中的所有MyClass实例。 .map { $0.name }MyClass实例的数组转换为相应的名称数组。

您的hash方法应为:

func hash(into hasher: inout Hasher) {
    hasher.combine(name)
    hasher.combine(other)
}


如果查看Hashable的文档,则可以看到一个清晰的示例。

关于swift - 如何在自定义类型的字典中快速使用/引用键?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56084375/

10-11 17:14