不能使用类型'()'的索引下标'[Int]'类型的值

时间:2017-04-13 01:48:27

标签: ios arrays swift

我试试

  func PRGA() {
    var l = 256
    var i = 0, j = 0, index = 0
    while(l > 0) {
        i = (i + 1) % 256
        j = (j + stable[i]) % 256
        let tmp = stable[i]
        stable[i] = stable[j]
        stable[j] = tmp
        let t  = (stable[j] + stable[i]) % 256
        sonkey[index+=1] = stable[t]
        l -= 1
    }

}

这可以在swift2.3中工作,但是当我更新到swift3时,无法正常工作,在sonkey中[index + = 1]索引无法转换为类型'()'的索引

2 个答案:

答案 0 :(得分:2)

主要问题是+=是一个语句,而不是Swift中的表达式。它不会计算为可用作下标的Int值。

但是,您甚至不需要使用+=手动增加index,因为您可以使用for循环更轻松地编写此代码:

func PRGA() {   
    var i = 0, j = 0
    for index in 0..<256 {
        i = (i + 1) % 256
        j = (j + stable[i]) % 256

        swap(&stable[i], &stable[j])

        let t  = (stable[j] + stable[i]) % 256
        sonkey[index] = stable[t]
    }
}

如果我知道这段代码试图实现的目的,我会更好地帮助你。

答案 1 :(得分:1)

表达式sonkey[index+=1]无效。 Swift 3删除了像index++这样的表达式。我甚至不确定sonkey[index+=1]在Swift 2中的含义。

如果你的目标是使用索引的当前值作为sonkey的下标然后增加后缀,你现在必须分两步完成:

    sonkey[index+=1] = stable[t]
    index += 1