数组中的可选值
Optional value in array
谁能给我解释一下为什么这里的代码 returns 错误:
"fatal error: unexpectedly found nil while unwrapping an Optional value"
if let steps = legs[0]["steps"] {
for i in 0...steps.length {
print(steps[i])
}
}
而这段代码:
let steps = legs[0]["steps"]!
print(steps[0])
returns 想要的输出?我很困惑,因为我无法以某种方式获取数组中包含的所有步骤的值..
同样:
for i in 0...legs[0]["steps"]!.length {
print(legs[0]["steps"]![i]["start_location"])
}
在以下情况下出现致命错误:
print(legs[0]["steps"]![0]["start_location"])
returns 可选值
长度??
首先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)
}
谁能给我解释一下为什么这里的代码 returns 错误: "fatal error: unexpectedly found nil while unwrapping an Optional value"
if let steps = legs[0]["steps"] {
for i in 0...steps.length {
print(steps[i])
}
}
而这段代码:
let steps = legs[0]["steps"]!
print(steps[0])
returns 想要的输出?我很困惑,因为我无法以某种方式获取数组中包含的所有步骤的值..
同样:
for i in 0...legs[0]["steps"]!.length {
print(legs[0]["steps"]![i]["start_location"])
}
在以下情况下出现致命错误:
print(legs[0]["steps"]![0]["start_location"])
returns 可选值
长度??
首先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)
}