【问题标题】:Unwrapping Optional Type Any from Dictionary从字典中展开可选类型 Any
【发布时间】:2015-04-11 03:52:30
【问题描述】:

我之前问过一个类似的问题,但是答案似乎不起作用。

我有一本名为 Settings 的字典:

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"]) 它会返回 Optional("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,就好像我提供的键不存在一样 - 返回 nil,因此将变量设置为 0.0

有人可以帮忙吗?

【问题讨论】:

  • 可能是因为您不能将对象转换为基元吗?尝试使用.doubleValue() 而不是as? Double
  • 嗨,Ian,不确定您的建议。请您进一步解释一下吗?
  • var settings = String: Any 为什么?几乎从不需要使用 Any;如果你这样做,AnyObject 会更好。而且你的值都是双倍的。

标签: ios xcode swift dictionary forced-unwrapping


【解决方案1】:

这些是以字符串的形式出现的,而不是数字 - 尝试类似:

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

【讨论】:

  • 当使用monsterMinSpeed = (settings["monsterMinSpeed"] as? NSString)?.doubleValue 时,它给了我一个可选类型'Double?'的错误值没有打开。你的意思是用'!'要么 '?'。但是,当它在使用 '!' 时引发错误以及两者都不使用时
  • 已更新 - 您仍然需要 ?? 运算符。
  • 如果您实际上是在创建字典,而且看起来确实如此,我建议您使用 [string:double] ,除非您真的打算使用双精度以外的值。
猜你喜欢
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
  • 2021-04-22
  • 2021-01-16
相关资源
最近更新 更多