Являются ли ++ и + = 1 точно такими же?
Я просто переключаюсь на Swift на пару дней, и я замечаю, что postfix и prefix ++ и - будут удалены в Swift 3. Я провел некоторое исследование и, согласно объявлению на веб-сайте Swift, оператор ++ и - будет заменено на + = 1 и - = 1. Ссылка здесь Новые функции в 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
}
Я попытался это исправить, но все равно застрял.
Ответы
Ответ 1
Как сказано в моем комментарии, вот как вам нужно написать его сейчас, чтобы заменить постфикc++. Другим способом было бы использовать промежуточную переменную, если вам не нравится вещь -1.
let incrementCounter1: () -> Int = {
counter1+=1 //original is counter1++
return counter1-1;
}
Ответ 2
В документах Apple четко указано, скопировано здесь для вашего удобства:
Примечание
Операторы составного присваивания не возвращают значение. Например, вы не можете написать let b = a += 2
.
Нет, оператор ++
НЕ совпадает с +=
.
Ответ 3
Нет, они не идентичны, ++ и - increment (или декремент) и return, + = и - = добавляют (или вычитают) сумму в простой для чтения короткой форме, но они не возвращаются что-нибудь.
Итак, вам нужно отделить изменение значения от использования значения. В этом и заключается суть устаревания - чтобы ваш код стал легче читать и поддерживать.
Ответ 4
Нет, они не идентичны, вам нужно сначала увеличить, а затем вернуть значение. Попробуйте это.
func countingCounter() -> (() -> Int){
var counter1 = 0
let incrementCounter1: () -> Int = {
counter1 += 1
return counter1
}
return incrementCounter1
}