2016-03-25 39 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]) 

我不确定。测试它。