++已被弃用 - “+ = 1无法解决问题”

时间:2016-03-25 11:15:26

标签: deprecated array-merge swift2.2

将Xcode更新为7.3后,我有一些警告说:

  

'++'已弃用:它将在Swift 3中删除

出现警告的代码是合并两个数组的函数:

arr4.append(arr1[i++])

我尝试过更改它:

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

但我收到错误说:

  

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

完整的代码是:

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 个答案:

答案 0 :(得分:2)

使用:

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

改变的动机是易读性 - 确保正确拼写步骤,减少歧义。表达式a += 1的结果是void类型 - 它执行某些操作但不评估任何内容 - 表示为空元组(),并且不能用作数组索引。

(旁白:+= 1也不是C中++的直接替代。

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

...将产生与等效b = a ++;不同的输出。)

答案 1 :(得分:1)

<强>代码:

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

如果你坚持一行就行。你可以,但它看起来很难看:

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

我不确定。测试它。