[swift]数组中的可选值

标签: ios Swift
发布时间: 2017/3/6 23:15:25
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

谁能告诉我为什么在这里这段代码返回的错误:"致命错误︰ 意外地发现了同时展开一个可选的值为零"

if let steps = legs[0]["steps"] {
    for i in 0...steps.length {
        print(steps[i])
    }
}

虽然这段代码︰

let steps = legs[0]["steps"]!
print(steps[0])

返回所需的输出?我很迷茫,因为我已经不能够得到的步骤以某种方式数组中包含的所有值。

同样︰

for i in 0...legs[0]["steps"]!.length {
    print(legs[0]["steps"]![i]["start_location"])
}

获取时出现致命错误︰

print(legs[0]["steps"]![0]["start_location"])

返回一个可选值

解决方法 1:

长度??

首先是什么类型的 steps ?如果它是一个数组,它并没有 length 属性,但 count

发生了什么事情?

让我们看看这个示例代码片段

let words = ["Hello", "world"]

for i in 0...words.count {
    print(words[i])
}

这里 words.count2 所以 for 正在执行 3 次 (我 = 0,我 = 1,我 = 2)。 因为数组索引开始从 0 ,以下元素都可用

words[0] // "Hello"
words[1] // "world"

正如你可以想象最后执行的循环 (当 i=2 ) 并访问 words[2] ,不存在 !这就产生了碰撞。

访问正确的索引

现在让我们看看你for loop

for i in 0...steps.length {
    print(steps[i])
}

前一段所述,在最后一个循环执行您正在访问一个元素,并不存在。它应该是

for i in 0..<steps.count {
    print(steps[i])
}

为在

更妙的是你能摆脱指标的简单地写

for step in steps {
    print(step)
}

为每个

另一种语法前, 一个块的代码相同的结果

steps.forEach { step in
    print(step)
}
赞助商