swift中带有可选变量的冗余-有优雅的解决方案吗?

swift中带有可选变量的冗余-有优雅的解决方案吗?,swift,Swift,这可能被视为一个小问题,但它在代码中看起来很丑陋,我想解决它 我声明了一个可选变量,并希望以后更改它,如果它不是空的(!=nil),则此变量的代码为: 先申报 private var myVariable: Int? // Optional Integer variable 以后的减量,当不为空时 { if myVariable != nil {myVariable!--} // Same condition in "if" and in unwrapping } 我需要即使使用if

这可能被视为一个小问题,但它在代码中看起来很丑陋,我想解决它

我声明了一个可选变量,并希望以后更改它,如果它不是空的(
!=nil
),则此变量的代码为:

先申报

private var myVariable: Int? // Optional Integer variable
以后的减量,当不为空时

{
    if myVariable != nil {myVariable!--} // Same condition in "if" and in unwrapping
}
我需要
即使使用
if条件
确定变量有值。这是多余的,意味着Swift必须进行两次相同的比较

有没有更优雅的方法


我当前的Xcode版本是6.3。

作为示例,您可以执行以下操作:

myVariable?++
myVariable?--
myVariable? += 10

这使用可选的链接-如果
myVariable
具有非nil值,则该值将展开并递增。否则,语句返回nil。

作为示例,您可以执行以下操作:

myVariable?++
myVariable?--
myVariable? += 10

这使用可选的链接-如果
myVariable
具有非nil值,则该值将展开并递增。否则,语句将返回零。

您的问题答案为


你的问题的答案是


我相信在变量后面加“!”的意义在于,Swift不需要再次检查。您用“!”表示myVariable不是nil,它有一个值,这样它就不会重复检查。

我相信在变量后面加“!”的意义在于,Swift不需要重复检查。您用“!”表示myVariable不是nil,它有一个值,因此不会重复检查。

myVariable=myVariable.map{$0-1}
,尽管我不确定这是否真的更好。这个怎么样<代码>myVariable?+=1
myVariable=myVariable.map{$0-1}
虽然我不确定这是否真的更好。这个怎么样<代码>myVariable?+=1或只是
myVariable?++
或只是
myVariable?++
这实际上是我尝试过的事情之一,但没有成功。首先,使用将其定义为只读的
let
定义
myVariable
。没有办法减少它或给它赋值。第二,即使您能够在if主体内更改
myVariable
的值,它仍然只会更改内部
myVariable
的值,而不会更改外部变量的值。这实际上是我尝试过的事情之一,但没有起作用。首先,使用将其定义为只读的
let
定义
myVariable
。没有办法减少它或给它赋值。第二,即使您能够在if主体内部更改
myVariable
的值,它仍然只会更改内部
myVariable
的值,而不会更改外部变量的值。在使用“强制展开”操作符之前,您需要检查该值是否为非零。如果您使用它并且可选值为nil,您的程序将崩溃。在使用“强制展开”操作符之前,您确实需要检查该值是否为非nil。如果您使用它,并且可选值为nil,您的程序将崩溃。
if let myVariable = myVariable { //if - let unwrapping
    myVariable-- //don't need the suffix now
}