我有一本字典(myDictionary),其中的键是自定义类型(MyClass),其中包括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/