2017-04-13 301 views
-1

我嘗試不能與類型的索引,下標類型「[INT]」的值「()」

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]索引不能轉換爲類型索引'()'

+1

這段代碼很不清楚,你應該給這些變量更有意義的名字。此外,您應該使用'swap'而不是手動進行3線交換。 – Alexander

回答

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

如果你在索引中使用for循環,那麼在循環體內你不應該有index + = 1 –

1

表達式sonkey[index+=1]無效。 Swift 3刪除了像index++這樣的表達式。我甚至不知道什麼sonkey[index+=1]意味着斯威夫特2

如果你的目標是利用指數的當前值作爲下標來sonkey然後遞增後記,你現在要做的是,在2個步驟:

sonkey[index+=1] = stable[t] 
    index += 1 
相關問題