有人可以向我解释为什么这里的代码会返回错误: "致命错误:在展开可选值"
时意外发现nilif 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"])
返回一个可选值
答案 0 :(得分:2)
首先steps
的类型是什么?如果它是一个数组,则它没有length
属性,而是count
。
让我们看看这个代码片段
let words = ["Hello", "world"]
for i in 0...words.count {
print(words[i])
}
此处words.count
为2
,因此for
正在执行3次(i = 0,i = 1,i = 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)
}