【发布时间】:2015-10-24 03:41:30
【问题描述】:
我了解可选项的工作原理,但这让我陷入了困境。我有一个名为num 的变量,我想增加它,所以我做了以下操作:
var num:Int! = 0
num++ //ERROR - Unary operator ++ cannot be applied to an operand of type Int!
但由于某种原因,Swift 不会让我增加未包装的力 Int,即使它应该被视为普通的 Int,并且在幕后具有 nil 的功能。所以我尝试了以下方法,并且成功了:
var num:Int! = 0
num = num + 1 //NO ERROR
但是,根据它给我的错误消息,我尝试了以下方法以使增量运算符仍然有效:
var num:Int! = 0
num!++ //NO ERROR
我的问题是为什么第一位代码会中断,而第二位和第三位代码却没有?另外,既然num 是Int!,我不应该像普通的Int 一样对待它吗?最后,由于Int! 应该被视为普通的Int,我如何才能在第三个示例中解开它?谢谢。
【问题讨论】:
-
由于您立即将其初始化为
0,因此它不必是可选的。您可以拥有var num = 0而无需初始化器 -
感谢您的信息,但无论如何,为什么我上面的代码很奇怪?
-
@JackWu:将其设为可选意味着您可以稍后将其设置为 nil,如果您有理由这样做。
-
后缀运算符采用“inout 参数”,所以这基本上是相同的问题:Passing an implicitly unwrapped variable into inout parameter doesn't compile。
-
@gnasher729 我知道可选的功能。这个问题非常清楚地表达了
num永远不会设置为nil的意图。