非法指示是什么意思:4?

时间:2019-04-23 17:27:23

标签: swift

下面是快速编写的小代码段,尽管显示代码似乎没有错,但给出的错误提示如下。

致命错误:索引超出范围 非法指令:4

我不清楚问题的确切原因是什么?如果有人可以分享有关它的见解,那将真的很有帮助。

func getBinary(ValueInDecimal:Int) -> [Int]
{
    var valueToPlayWith = ValueInDecimal

    var aryBinary = [Int]()

    var i:Int = 0

    while valueToPlayWith != 0 {

        aryBinary[i] = valueToPlayWith % 2
        valueToPlayWith = valueToPlayWith / 2
        i = i + 1
    }

    return aryBinary
}

// calling of function 

let aryBin = getBinary(ValueInDecimal:10)

print(aryBin)

期望的答案是0和1s数组中传递的十进制数的二进制值。

所以我认为,如果我会像这样使用它,那么语法array [i] = value将起作用。

func getBinary(ValueInDecimal:Int) -> [Int:Int]
{
    var valueToPlayWith = ValueInDecimal

    var aryBinary = [Int:Int]()

    var i:Int = 0

    while valueToPlayWith != 0 {

        aryBinary[i] = valueToPlayWith % 2
        valueToPlayWith = valueToPlayWith / 2
        i = i + 1
    }

    return aryBinary
}

let aryBin = getBinary(ValueInDecimal:10)

print(aryBin)

1 个答案:

答案 0 :(得分:1)

这是一个空数组

var aryBinary = [Int]()

所以这将崩溃,因为索引0不存在

aryBinary[i] = valueToPlayWith % 2
  

致命错误:索引超出范围

您可能需要

func getBinary(_ valueInDecimal:Int) -> [Int] {

    var valueToPlayWith = valueInDecimal 
    var aryBinary = [Int]() 
    while valueToPlayWith != 0 { 
        aryBinary.append(valueToPlayWith % 2) 
        valueToPlayWith = valueToPlayWith / 2 
    } 
    return aryBinary
}


let aryBin = getBinary(10)

print(aryBin)  /// [0, 1, 0, 1]