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中可选变量的冗余 - 有没有优雅的解决方案?的主要内容,如果未能解决你的问题,请参考以下文章

Swift5.4 中可选的误报

swift 优雅地处理Swift中可本地化的字符串。注意:此代码在Swift 2中,需要在现代Swift中使用更新。

如果在 swift 3.1 中可选绑定到 any 时如何使用 if let

swift中的可选类型

Swift:如果变量 a 是非可选的,那么为啥变量 b 是可选的? [复制]

关于swift中的可选类型