++ 和 +=1 完全一样吗?
Are ++ and +=1 exactly the same?
我刚切换到 Swift 几天,我注意到后缀和前缀 ++ 和 -- 将在 Swift 中删除 3. 我做了一些研究并根据Swift网站公告,运算符++和--将替换为+= 1和-= 1。Link此处New Features in Swift 2.2
我有一段代码可以在旧版本 Swift 上正常工作。当我从我的原始代码 return counter1++
更改为 return counter1 += 1
并弹出一条错误消息说
No '+=' candidates produce the expected contextual type 'Int'
这是我的例子
func countingCounter() -> (() -> Int){
var counter1 = 0
let incrementCounter1: () -> Int = {
return counter1+=1 //original is counter1++
}
return incrementCounter1
}
我已经尝试解决这个问题,但仍然卡住了。
不,它们不相同,++ 和 -- 递增(或递减)和 return,+= 和 -= 以简单易读的简短形式添加(或减去)数量,但他们 return 什么都没有。
因此,您需要将价值变化与价值使用分开。这才是真正弃用的重点 - 让您的代码更易于阅读和维护。
在Apple docs里写的很清楚,为了方便复制在这里:
NOTE
The compound assignment operators do not return a value. For example, you cannot write let b = a += 2
.
不,++
运算符与 +=
不同。
不,它们不相同,您必须先递增,然后 return value.try 这个。
func countingCounter() -> (() -> Int){
var counter1 = 0
let incrementCounter1: () -> Int = {
counter1 += 1
return counter1
}
return incrementCounter1
}
正如我在这里的评论中所说,您现在必须如何编写它来替换后缀 ++。如果您不喜欢 -1 ,另一种方法是使用中间变量。
let incrementCounter1: () -> Int = {
counter1+=1 //original is counter1++
return counter1-1;
}
在这里练习死灵法术,但还没有人提到 defer
- 这里有一个比 @Walfrat 的方法更优雅的替代方法,您可能会喜欢它的外观。 Defer 在返回值后进行递增。
let postIncrementCounter1: () -> Int = {
defer { counter1 += 1 } // original is counter1++
return counter1
}
我刚切换到 Swift 几天,我注意到后缀和前缀 ++ 和 -- 将在 Swift 中删除 3. 我做了一些研究并根据Swift网站公告,运算符++和--将替换为+= 1和-= 1。Link此处New Features in Swift 2.2
我有一段代码可以在旧版本 Swift 上正常工作。当我从我的原始代码 return counter1++
更改为 return counter1 += 1
并弹出一条错误消息说
No '+=' candidates produce the expected contextual type 'Int'
这是我的例子
func countingCounter() -> (() -> Int){
var counter1 = 0
let incrementCounter1: () -> Int = {
return counter1+=1 //original is counter1++
}
return incrementCounter1
}
我已经尝试解决这个问题,但仍然卡住了。
不,它们不相同,++ 和 -- 递增(或递减)和 return,+= 和 -= 以简单易读的简短形式添加(或减去)数量,但他们 return 什么都没有。
因此,您需要将价值变化与价值使用分开。这才是真正弃用的重点 - 让您的代码更易于阅读和维护。
在Apple docs里写的很清楚,为了方便复制在这里:
NOTE
The compound assignment operators do not return a value. For example, you cannot write
let b = a += 2
.
不,++
运算符与 +=
不同。
不,它们不相同,您必须先递增,然后 return value.try 这个。
func countingCounter() -> (() -> Int){
var counter1 = 0
let incrementCounter1: () -> Int = {
counter1 += 1
return counter1
}
return incrementCounter1
}
正如我在这里的评论中所说,您现在必须如何编写它来替换后缀 ++。如果您不喜欢 -1 ,另一种方法是使用中间变量。
let incrementCounter1: () -> Int = {
counter1+=1 //original is counter1++
return counter1-1;
}
在这里练习死灵法术,但还没有人提到 defer
- 这里有一个比 @Walfrat 的方法更优雅的替代方法,您可能会喜欢它的外观。 Defer 在返回值后进行递增。
let postIncrementCounter1: () -> Int = {
defer { counter1 += 1 } // original is counter1++
return counter1
}