Swift 增加 Int!不工作

Swift increment Int! not working

我了解可选值的工作原理,但这让我陷入了困境。我有一个名为 num 的变量,我想增加它,所以我做了以下操作:

var num:Int! = 0
num++             //ERROR - Unary operator ++ cannot be applied to an operand of type Int!

但出于某种原因 Swift 不允许我增加展开的力 Int,即使它应该被视为具有 nil 能力的常规 Int在幕后。所以我尝试了以下方法,它起作用了:

var num:Int! = 0
num = num + 1     //NO ERROR

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

var num:Int! = 0
num!++            //NO ERROR

我的问题是为什么第一位代码会中断,而第二和第三位代码却不会?另外,既然 num 是一个 Int!,我不应该像对待普通的 Int 一样对待它吗?最后,由于 Int! 应该像常规 Int 一样对待,我如何才能在第三个示例中解包它?谢谢。

您使用了错误的类型 Int!,请改用 Int

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

inout 参数的通常工作方式是它们的 getter 被调用一次并且它们的 setter 至少被调用一次。在这种情况下 getter returns 和 Int!:

let num: Int! = 0
let num2 = num // is inferred to be of type Int!

所以 getter/setter 的签名与 function/operator 期望的不同。但是,如果它被分配给 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

旁注:

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