2016-03-25 62 views
1

更新的Xcode 7.3我有一些警告後說:++已經過時 - 「+ = 1不解決問題」

「++」已過時:它會在斯威夫特3被移除

在警告出現的代碼是合併兩個數組的函數:

arr4.append(arr1[i++]) 

我曾嘗試與改變它:

arr4.append(arr1[i += 1])

,但我得到一個錯誤說:

無法下標類型的值 '[[字符串]' 以 類型的索引 '()'

的完整的代碼是:

let arr1 = [["aaa","111"],["bbb","222"],["ccc","333"]] 
let arr2 = [["ddd","444"],["eee","555"],["fff","666"]] 

var arr4 = zip(arr1, arr2).reduce([]) { (newArr, p:(Array<String>, Array<String>)) -> [[String]] in 

    var arr = newArr 

    arr.append(p.0) 
    arr.append(p.1) 
    return arr 
} 

var i = arr4.count/2 
while i < arr1.count { 
    arr4.append(arr1[i++]) // WARNING 
} 

while i < arr2.count { 
    arr4.append(arr2[i++]) // WARNING 
} 
print(arr4) 

回答

2

用途:

arr4.append(arr1[i]) 
i += 1 

,這一變化主要動機是可讀性 - 確保步驟正確拼寫出來,減少歧義。表達式a += 1的結果是void的類型 - 它執行某些操作,但不計算任何內容 - 表示爲空元組(),並且不能用作數組索引。

(旁白:+= 1還沒有下++直接替代

int a = 3; 
    int b = a += 1; 
    NSLog(@"%d %d", a, b); 

...會產生比同等b = a ++;不同的輸出。)

+0

謝謝還是很好的解釋! C++中的 – SNos

+0

和目標c。 a + = 1返回一個值。你的答案是否具體針對swift? – hasan83

+0

是的。 Swift標記的問題如此Swift的答案。省略分號和所有內容。然後將提到的C放到一旁,並明確地提到這一點 - 其中包含的「NSLog」也是最有可能的Swift觀衆會選擇的線索。 – Tommy

1

代碼:

arr4.append(arr1[i]) 
i += 1 

如果你堅持要在一行中做到這一點。你可以但它看起來很難看:

arr4.append(arr1[(i += 1) - 1]) 

我不確定。測試它。