【问题标题】:++ is deprecated - "+= 1 is not solving the issue"++ 已弃用 - “+= 1 不能解决问题”
【发布时间】:2016-03-25 11:15:26
【问题描述】:

将 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)

【问题讨论】:

    标签: deprecated array-merge swift2.2


    【解决方案1】:

    用途:

    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 ++; 不同的输出。)

    【讨论】:

    • 在 c++ 和目标 c 中。 a += 1 返回一个值。您的答案是针对 swift 的吗?
    • 是的。 Swift 标记的问题,所以 Swift 回答。省略分号和所有内容。然后将 C 的提及放在一边,并明确提及——其中包含的 NSLog 也是最有可能 Swift 观众会接受的线索。
    【解决方案2】:

    代码:

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

    如果您坚持在一行中完成。你可以,但它看起来很丑:

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

    我不确定。测试一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-10
      • 2018-01-30
      • 2021-08-10
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多