2016-08-10 2 views
-2

Поскольку выражение «++» и «-» будет удалено в Swift 3, следующий код будет недействительным.Что такое замена «++» и «-» в swift3?

return i < 0 ? nil : i-- 

Теперь я просто переписать его, как этот

if i < 0 { 
    return nil 
} 
let res = i 
i -= 1 
return res 

Но это выглядит слишком .... громоздким.

Как переписать этот код как можно короче в Swift 3?

+3

Там нет причин для изменчивости здесь. Просто верните i-1 вместо мутирования i, а затем вернитесь. Ваш старый код останется таким же полезным. – SBI

+0

@SBI Глядя на ОП: переписывать, возможно, сокращение 'i' используется каким-то неявным способом (например,' i' является переменной inout). Вероятно, это и проблема [и XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). DarkLuna: если вам действительно нужно уменьшить 'i' и вернуть прежнее значение, как выглядит контекст использования этих операций? Вы, скорее всего, можете построить таким образом, что не будете сталкиваться с необходимостью использовать операторы '++' или '--' вообще. – dfri

+0

Я не думаю, что этот вопрос является обманом, который был отмечен как. Более того, речь идет не о том, что ответы ниже предполагали это (а именно, ответы до сих пор предполагали, что побочный эффект «i -» был непреднамеренным, где, как представляется, было преднамеренным, хотя и ошибочным). – Rob

ответ

1

Этот вопрос был подход Криса Lattner в this proposal

инкремент/декремент операторы в Swift были добавлены очень рано в развитии Swift, как перенесенных с C. Они были добавлены без много внимания, и не были так много подуманы с . Этот документ дает свежий взгляд на них, и в конечном итоге рекомендует просто удалить их полностью, так как они запутывают и несут свой вес.

Нижняя линия, вы не должны использовать эти встроенные мутирующие операторы.

В вашем примере Я не понимаю, почему вы изменили значение i непосредственно перед выходом из области.

Если есть причина того, что я пропускаю рассмотреть возможность сделать что не встраивать или использовать отличается

+0

@vacawama - Правильно, я обновил свой ответ. –

0

Вы можете еще тройной оператор:

return i < 0 ? nil : i - 1 
+0

, но значение i не изменяется. – DarkerLuna

+0

да, но вам не нужно менять 'i', поскольку вы существуете из области вашей функции с возвратом. Возврат дает новое значение 'i'. –

Смежные вопросы