Swift: Как закодировать хэш-карту с enum в качестве ключа?
У меня есть перечисление как это:
enum Direction : String {
case EAST = "east"
case SOUTH = "south"
case WEST = "west"
case NORTH = "north"
}
И у меня есть переменная с именем result, которая является Hashmap, использующей эти направления перечисления в качестве ключа.
var result = [Direction:[String]]()
Я попытался закодировать этот объект и отправить на другую сторону через многопользовательскую структуру. Однако, это терпит неудачу в кодере.
aCoder.encode(self.result, forKey: "result")
Ошибка говорит о том, что: "encode(with aCoder: NSCoder) *** Завершение приложения из-за необработанного исключения" NSInvalidArgumentException ", причина:" -[_SwiftValue encodeWithCoder:]: нераспознанный селектор, отправленный экземпляру 0x17045f230 "
Как я могу закодировать этот Hashmap?
Благодарю.
1 ответ
Как отмечено в комментарии JAL NSCoding
Эта функция основана на времени выполнения Objective C, поэтому вам нужно преобразовать ваш словарь во что-то, что можно безопасно преобразовать в NSDictionary
,
Например:
func encode(with aCoder: NSCoder) {
var nsResult: [String: [String]] = [:]
for (key, value) in result {
nsResult[key.rawValue] = value
}
aCoder.encode(nsResult, forKey: "result")
//...
}
required init?(coder aDecoder: NSCoder) {
let nsResult = aDecoder.decodeObject(forKey: "result") as! [String: [String]]
self.result = [:]
for (nsKey, value) in nsResult {
self.result[Direction(rawValue: nsKey)!] = value
}
//...
}