2015-02-10 3 views
1

Ранее я задал вопрос, похожий на этот вопрос, однако ответ, похоже, не работает.Unwrapping Дополнительный тип Любой из словаря

У меня есть словарь под названием Настройки: Настройки

Var = Строка: Любой

Это заполняется путем чтения текстового файла - все работает отлично

, когда я запускаю println(settings) он возвращает заполненный словарь как это должно.

[monsterRate: 1,0, monsterMinSpeed: 10.0, weaponPickupRate: 10.0, weaponPickupAmount: 50,0, goldPerMonster: 10.0, totalMonsters: 10.0, LevelNum: 1,0, monsterMaxSpeed: 15,0]

Если я запустить println(settings["monsterMinSpeed"]) он возвращает Дополнительно («10,0»)

Однако, когда я пытаюсь установить свои переменные значения, которая содержит словарь, он не работает:

monsterMinSpeed = (settings["monsterMinSpeed"] as? Double) ?? 0.0 
    monsterMaxSpeed = (settings["monsterMaxSpeed"] as? Double) ?? 0.0 
    monsterRate = (settings["monsterRate"] as? Double) ?? 0.0 
    weaponPickupAmount = (settings["weaponPickupAmount"] as? Double) ?? 0.0 
    weaponPickupKills = (settings["weaponPickupKills"] as? Double) ?? 0.0 
    goldPerMonster = (settings["goldPerMonster"] as? Double) ?? 0.0 

Несмотря на то, что в словаре есть значения, он всегда использует 0.0, как если бы клавиши, которые я предоставляю, не существуют, возвращают нуль и, следовательно, устанавливают переменную в 0.0

Может ли кто-нибудь помочь?

+0

Может быть, потому что вы не можете бросить объекты примитивов? Попробуйте использовать '.doubleValue()' вместо 'as? Double'. –

+0

Привет, Ян, неуверенный относительно того, что вы предлагаете. Пожалуйста, не могли бы вы объяснить дальше? – Ryann786

+0

'var settings = String: Any' Почему? Почти невозможно использовать Any; AnyObject лучше, если вы это сделаете. И все ваши ценности - Double. – matt

ответ

1

Те приходят в виде строк, а не чисел - попробовать что-то вроде:

monsterMinSpeed = (settings["monsterMinSpeed"] as? NSString)?.doubleValue ?? 0.0 
+0

при использовании 'monsterMinSpeed ​​= (настройки [" monsterMinSpeed ​​"] как? NSString) ?. doubleValue' это дает мне ошибку Значение дополнительного типа 'Double?' не разворачивается. Вы имели в виду использовать '!' или '?'. Однако, когда он выдает ошибку при использовании '!' а также при использовании ни – Ryann786

+0

Обновлено - вам все равно нужен оператор '??'. –

+0

Если вы действительно создаете словарь, и кажется, что это так, я бы предложил использовать [string: double], если вы действительно не планируете иметь значения, отличные от удвоений. –