swift中可选变量的冗余 - 有没有优雅的解决方案?
Posted
技术标签:
【中文标题】swift中可选变量的冗余 - 有没有优雅的解决方案?【英文标题】:Redundancy with optional variables in swift - is there an elegant solution? 【发布时间】:2015-04-14 07:52:22 【问题描述】:这可能被视为一个小问题,但它在代码中看起来很丑,我想解决它。
我声明了一个可选变量,如果它不为空(!= nil
)想稍后更改它的代码是:
先声明
private var myVariable: Int? // Optional Integer variable
以后递减,当不为空时
if myVariable != nil myVariable!-- // Same condition in "if" and in unwrapping
我需要!
,即使通过if-condition
确保变量具有值也是如此。这是多余的,意味着 Swift 必须进行两次相同的比较。
有没有更优雅的方式来做到这一点?
我当前的 Xcode 版本是 6.3。
【问题讨论】:
myVariable = myVariable.map $0 - 1
虽然我不确定这实际上更好。
这个怎么样? myVariable? += 1
【参考方案1】:
作为示例,您可以执行以下操作:
myVariable?++
myVariable?--
myVariable? += 10
这使用可选链接 - 如果myVariable
有非零值,它被解包并递增。否则该语句返回 nil。
【讨论】:
或者只是myVariable?++
【参考方案2】:
您的问题的答案是Optional Chaining。
myVariable?--
【讨论】:
【参考方案3】:if let myVariable = myVariable //if - let unwrapping
myVariable-- //don't need the suffix now
【讨论】:
这实际上是我尝试过的事情之一,但没有奏效。首先,您使用let
定义 myVariable
,将其定义为只读。没有办法减少它或给它赋值。其次 - 即使您能够在 if-body 中更改 myVariable
的值 - 它仍然只会更改内部 myVariable
的值,而不是外部值。【参考方案4】:
我相信给出“!”的意义。 after 变量是这样 Swift 不需要仔细检查。你说的是“!” myVariable 不是 nil 并且它有一个值,所以它不会仔细检查。
【讨论】:
在使用 force unwrap 运算符之前,您确实需要检查该值是否不为零。如果你使用它并且可选项为 nil,你的程序将会崩溃。以上是关于swift中可选变量的冗余 - 有没有优雅的解决方案?的主要内容,如果未能解决你的问题,请参考以下文章
swift 优雅地处理Swift中可本地化的字符串。注意:此代码在Swift 2中,需要在现代Swift中使用更新。
如果在 swift 3.1 中可选绑定到 any 时如何使用 if let