在 Swift 中总结数组值时出错

Posted

技术标签:

【中文标题】在 Swift 中总结数组值时出错【英文标题】:Error summing up the array values in Swift 【发布时间】:2015-02-04 18:41:08 【问题描述】:

我是 Swift 的新手。在 Playground 中尝试此代码并得到错误(请参见下面的描述),请您指出正确的方向 - 在哪里寻找解决方案?提前致谢。

func randomSet(num: Int, max: Int) -> Array<Double> 

    var randArray = Array<Double>()

    for index in 0...num 
        randArray[index] = Double(arc4random_uniform(max+1))
    

ERROR: var sum = randArray.reduce(0) $0 + $1

    for index in 0...num 
        randArray[index] = randArray[index] / Double(sum) * Double(max)
    

    return randArray


test = randomSet(10, 100)

在标有 ERROR 字样的行上,我得到了这个:

执行被中断,原因:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

【问题讨论】:

请edit您的帖子标题更能描述问题。 我怎样才能纠正这个问题? 当它出现在未来用户的搜索结果中时,它绝对没有意义。您的标题应描述问题或包含具有一定相关性的描述性问题。谢谢。 请注意,0...num 包括 范围结束,因此将为您提供一个包含 num+1 元素的数组。您可能想改为0 ..&lt; num 【参考方案1】:

该错误实际上是由于尝试使用下标在randArray 中附加值引起的。你应该改用append

for _ in 0...num 
    randArray.append(Double(arc4random_uniform(max+1)))

【讨论】:

【参考方案2】:

这个错误不是来自函数reduce,而是在你的数组初始化时,你不能在初始化之前访问索引。下面的代码修复了这个错误。

  for index in 0...num 
    randArray.append(Double(arc4random_uniform(max+1)))
  

希望对你有帮助

【讨论】:

谢谢你,Hamza,这让我们更清楚了!换句话说,我必须先用一些值填充我的数组,然后才能使用索引。明白了。

以上是关于在 Swift 中总结数组值时出错的主要内容,如果未能解决你的问题,请参考以下文章

Array的用法总结-swift

iOS-在表格中显示数组值时出错

总结了一些指针易出错的常见问题

Swift:“在展开可选值时意外发现 nil”在数组追加中

在展开可选值时发现 nil,附加到数组,Swift 3

concurrentPerform UnsafeMutablePointer.deinitialize 向数组添加值时出错