++和+ = 1完全相同吗?

时间:2016-04-26 06:45:05

标签: swift macos swift2 xcode7

我只是切换到Swift几天,我注意到后缀和前缀++和 - 将在Swift 3中删除。我做了一些研究,根据Swift网站上的公告,运算符++ - 将被+ = 1和 - = 1替换。链接此处New Features in Swift 2.2

我有一段代码可以与旧版本的Swift一起使用。当我从原始代码return counter1++更改为return counter1 += 1并弹出错误

  

没有'+ ='候选人产生预期的上下文类型'Int'

这是我的例子

func countingCounter() -> (() -> Int){
    var counter1 = 0
    let incrementCounter1: () -> Int = {
        return counter1+=1   //original is counter1++
    }
return incrementCounter1
}

我试图解决这个问题,但仍然陷入困境。

5 个答案:

答案 0 :(得分:18)

它在Apple docs中明确说明,为方便起见,在此复制:

  

请注意

     

复合赋值运算符不返回值。例如,您无法编写let b = a += 2

不,++运算符与+=不同。

答案 1 :(得分:8)

不,它们不相同,++和 - 递增(或递减)并返回,+ =和 - =以简单阅读简短形式添加(或减去)金额,但它们不返回任何东西。

因此,您需要将值更改与值使用情况分开。这实际上是弃用的全部内容 - 使代码更易于阅读和维护。

答案 2 :(得分:8)

正如我在评论中所说,你现在必须编写它来替换postfix ++。另一种方法是使用中间变量,如果你不喜欢-1的东西。

let incrementCounter1: () -> Int = {
    counter1+=1   //original is counter1++
    return counter1-1;
}

答案 3 :(得分:1)

不,它们不相同,你必须先增加,然后返回值。这个。

func countingCounter() -> (() -> Int){
    var counter1 = 0
    let incrementCounter1: () -> Int = {
        counter1 += 1
        return counter1
    }
    return incrementCounter1
}

答案 4 :(得分:0)

在这里练习巫术,但没有人提到defer-这是@Walfrat方法的一种更优雅的替代方法,您可能会喜欢它的外观。延迟会在返回值后进行递增。

let postIncrementCounter1: () -> Int = {
    defer { counter1 += 1 } // original is counter1++
    return counter1
}