Swift增量Int!不工作

Ada*_*ans 6 increment optional swift

我理解选项如何工作,但这让我陷入了困境.我有一个变量调用num,我想增加它,所以我做了以下:

var num:Int! = 0
num++             //ERROR - Unary operator ++ cannot be applied to an operand of type Int!
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,斯威夫特不会让我增加一个展开的力量Int,即使它应该被视为Int具有零幕后能力的常规.所以我尝试了下面这个,它起作用了:

var num:Int! = 0
num = num + 1     //NO ERROR
Run Code Online (Sandbox Code Playgroud)

但是,基于它给出的错误消息,我尝试了以下方法使增量运算符仍然有效:

var num:Int! = 0
num!++            //NO ERROR
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么第一位代码断开,第二位和第三位代码没有?另外,既然numInt!,我不应该像常规一样对待它Int吗?最后,由于a Int!应该像常规一样对待Int,我怎么能在第三个例子中解开呢?谢谢.

Qby*_*yte 1

所有参数都会出现此错误inout,应将其视为错误。

参数工作的通常方式inout是它们的 getter 被调用一次,它们的 setter 至少被调用一次。在这种情况下,getter 返回一个Int!

let num: Int! = 0
let num2 = num // is inferred to be of type Int!
Run Code Online (Sandbox Code Playgroud)

因此 getter/setter 的签名与函数/运算符期望的不同。但是,如果该值被分配给Int或传递,编译器应该隐式解开该值,如下所示:

var num3 = 0 // is of type Int
num3 = num // gets automatically unwrapped

// also with functions
func someFunc(i: Int) {}
someFunc(num) // gets automatically unwrapped
Run Code Online (Sandbox Code Playgroud)

边注:

如果您想将 an 传递给具有类型 参数的Int函数,几乎会发生相同的错误。但这里很明显为什么这不起作用(逻辑上): an 的 setter永远不会接受 a 。inoutInt!Intnil