Swift 什么';它取代了'++';和'--';在迅捷3?

Swift 什么';它取代了'++';和'--';在迅捷3?,swift,swift3,Swift,Swift3,由于表达式“++”和“---”将在Swift 3中删除,因此下面的代码将无效 return i < 0 ? nil : i-- 返回i 你仍然可以是三元运算符: return i < 0 ? nil : i - 1 返回i

由于表达式“++”和“---”将在Swift 3中删除,因此下面的代码将无效

 return i < 0 ? nil : i-- 
返回i<0?尼尔:我--
现在我就这样重写它

if i < 0 {
   return nil
}
let res = i
i -= 1
return res
如果i<0{
归零
}
设res=i
i-=1
返回res
但它看起来太。。。。笨重的


如何在Swift 3中尽可能短地重写此代码?

此问题由Chris Lattner在年提出

Swift中的递增/递减运算符是在 Swift的发展,作为C.的一个结转。这些 没有太多的考虑,从那以后就没怎么考虑过 那么。本文档提供了一个全新的视角,最终 建议我们完全删除它们,因为它们令人困惑且 没有承受他们的重量

总之,您不应该再使用这些内联变异运算符

在您的示例中我不明白您为什么要在退出作用域之前更改
I
的值


如果我有缺失的原因,请考虑做<强>不内联< /强>或使用<强>不同< /强>

你仍然可以是三元运算符:

return i < 0 ? nil : i - 1 
返回i<0?零:i-1

这里没有可变的理由。只要返回i-1,而不是突变i然后返回。您的旧代码也会同样有用。@SBI查看OP:s重写,可能是以某种隐式方式使用了
i
的减少(例如
i
是一个inout变量)。这可能是,尽管如此。DarkLuna:如果您确实需要减少
i
并返回其先前的值,那么使用这些操作的上下文是什么样子的?您很有可能以这样一种方式构造,即您根本不需要使用
++
--
运算符。我不认为这个问题是标记为的dupe。此外,下面的答案并不是假设这是一个问题(也就是说,到目前为止的答案假设,
i--
的副作用是无意的,这似乎是故意的,尽管被误导了)。@Rob我最初的解释与你的w.r.t.duplicate mark相同(是的,下面的答案都没有真正回答实际问题).但是,副本中接受的答案确实像我对杰克现在删除的答案发表的评论一样,包括复制后减量运算符的故意返回和副作用的
延迟
解决方案,因此我相信这毕竟是一个有效的重复标记。但是I的值没有更改是的,但不需要更改
i
由于您在返回的函数范围内存在。返回给您新的值
i
@vacawama-正确,我更新了我的答案。