我正在使用提供的值从字典中访问数组值:
print("thisFrom "+thisFrom)
print(values[thisFrom])
let ingredientArr = values[thisFrom] as! [String: Float]
但这是输出:
thisFrom cup
Optional(["butter": 226.80000000000001, "caster sugar": 225.00730999999999, "granulated sugar": 200.0, "tbsp": 16.0, "ml": 236.58823649999999, "flour": 125.0, "tsp": 48.0, "icing sugar": 125.0])
fatal error: unexpectedly found nil while unwrapping an Optional value
当nil
行显示值且结果数组有效时,我不明白如何返回print
。
我正在使用Swift 3。
答案 0 :(得分:1)
values[thisFrom]
不属于[String: Float]
类型。而是[String: Double]
。
为什么?
让我们看看关键“黄油”的值:它是一个floating-point数字,精度超过6位小数。所以它不能是Float
。这就是强制投射失败的原因。
答案 1 :(得分:0)
它所引用的解包是as
之后的感叹号。你写的内容与:
let optionalAttemptedCast = values[thisFrom] as? [String: Float]
let ingredientArray = optionalAttemptedCast!
希望这清楚地说明失败的是演员阵容。也就是说,values[thisFrom]
确实存在,正如您从print()
看到的那样,但它无法转换为[String: Float]
类型。
答案 2 :(得分:0)
当我把这段代码放在游乐场时:
let values: [String: Any?] = ["cup": ["butter": 226.80000000000001, "caster sugar": 225.00730999999999, "granulated sugar": 200.0, "tbsp": 16.0, "ml": 236.58823649999999, "flour": 125.0, "tsp": 48.0, "icing sugar": 125.0]]
let thisFrom = "cup"
let ingredientArr = values[thisFrom] as! [String: Float]
Xcode给了我你看到的错误。如果我将引发解包错误的行更改为
let ingredientArr = values[thisFrom] as! [String: Double]
工作正常。
似乎您的字典属于[String: Double]
类型,而不是[String: Float]
。
我建议您将强制转换更改为可选的强制转换:
if let ingredientArr = values[thisFrom] as? [String: Double] {
// safely casted to [String: Double]
}