Это то, что я пытаюсь сделать со словарем:Как использовать словарь в Swift для родственного типа?
if let deliveries = dictionary["deliveries"] as? NSDictionary {
var castedDeliveries = [Double: Double]()
for delivery in deliveries {
if let value = delivery.value as? Double {
castedDeliveries[Double(delivery.key as! NSNumber)] = value //Could not cast value of type 'NSTaggedPointerString' (0x1a1e3af20) to 'NSNumber' (0x1a1e458b0).
}
}
settings!.deliveries = castedDeliveries
}
И это то, что я пытаюсь бросить, как часть ответа JSON от сервера:
deliveries = {
2 = 0;
5 = "2.59";
7 = "3.59";
};
Это не работает, потому что ошибка в строке комментировал:
не удалось бросить значение типа 'NSTaggedPointerString' (0x1a1e3af20) к 'NSNumber' (0x1a1e458b0).
Очевидно, что код не попадает внутрь 'if', потому что' dictionary ["deliveries"] 'is * not * a' [Double: Double] '. Передайте его любому типу, который на самом деле есть, затем сделайте копию, в которой каждая пара ключей/значений будет индивидуально выполняться. – dasblinkenlight
Нет, следующие работы: 'castedDeliveries [(delivery.key as! NSString) .doubleValue] = значение' Я не знаю почему. –
Указатель Taggaed - это еще одна проблема, это особый вид переменной, которая вместо указания на определенный объект в памяти содержит самую информацию. Но я думаю, что ваш подход слишком запутан. Сначала поймите тип данных, возвращаемых из операции разбора JSON, во-вторых, попробуйте понять, что нужно сделать, сделайте это шаг за шагом – Andrea