【问题标题】:why do i get fatal error because of Index out of range?为什么我会因为索引超出范围而出现致命错误?
【发布时间】:2019-12-07 14:28:07
【问题描述】:
var numbers = [45, 73, 195, 53]

//Write your code here
 //Replace this comment with your code.
var computedNumbers : [Double] = Array() 
for i in 0...numbers.count-1 {computedNumbers[i] = Double(numbers[i])*Double(numbers[i])}
print(computedNumbers)

当我尝试在 swift 代码上运行代码时,它给了我以下错误:致命错误:索引超出范围。 我试图通过将 numbers 数组中的每个元素自身相乘来重现一个 double 数组。

【问题讨论】:

  • 因为 computedNumbers[i 没有任何值但您正在访问它 [i]。将值插入数组,使用。插入或添加方法
  • for i in 0...numbers.count-1 是一个真的糟糕的反模式。请阅读github.com/amomchilov/Blog/blob/master/…

标签: swift xcode swift4


【解决方案1】:

您的 computedNumbers 数组是空的,并且您正试图访问您的 for 循环中为空的 computedNumbers[i] 值。如果您想在其中添加数据,请尝试以下操作:

var numbers = [45, 73, 195, 53]

//Write your code here
 //Replace this comment with your code.
var computedNumbers : [Double] = []
for i in 0...numbers.count-1 {
  let num = Double(numbers[i])*Double(numbers[i])
  computedNumbers.append(num)
} 
print(computedNumbers)

【讨论】:

  • numbers 为空时,它仍然会崩溃,并且总体上仍然是非常糟糕的 Swift 代码。它应该只是let numbers = [45, 73, 195, 53]let squares = numbers.map { $0 * $0 }
  • 你是对的。但根据问题,数字数组不为空。
  • 这不是你应该依赖的东西,尤其是当“做正确的事”是一个如此简单的选择时。
猜你喜欢
  • 1970-01-01
  • 2016-08-22
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
相关资源
最近更新 更多