Swift增量Int!不工作

时间:2015-08-01 15:56:43

标签: swift increment optional

我理解选项如何工作,但这让我陷入了困境。我有一个名为num的变量,我想增加它,所以我做了以下几点:

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

但由于某种原因,斯威夫特不会让我增加一个展开的力量Int,尽管它应该像普通的Int一样被视为具有零能力的幕后花絮。所以我尝试了下面这个,它起作用了:

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

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

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

我的问题是,当代码的第二位和第三位不在时,为什么第一位代码会中断?此外,由于numInt!,我不应该像常规Int一样对待它吗?最后,由于Int!应该像常规Int一样对待,我怎么能在第三个例子中解开它?感谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

因此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

旁注:

如果要将Int传递给inout类型Int!参数的函数,则会发生几乎相同的错误。但是在这里很明显为什么这不起作用(逻辑上):Int的setter从不接受nil

答案 1 :(得分:-3)

您使用了错误的Int!类型,而是使用Int