我理解选项是如何工作的,但这让我陷入了困境。我有一个变量叫做num
我想增加它,所以我做了以下操作:
var num:Int! = 0
num++ //ERROR - Unary operator ++ cannot be applied to an operand of type Int!
但出于某种原因,斯威夫特不会让我增加展开的力Int
,尽管它应该像普通的一样对待Int
在幕后具有 nil 的能力。所以我尝试了以下方法,并且有效:
var num:Int! = 0
num = num + 1 //NO ERROR
但是,根据它给我的错误消息,我尝试了以下操作以使增量运算符仍然有效:
var num:Int! = 0
num!++ //NO ERROR
我的问题是为什么代码的第一位会中断,而代码的第二位和第三位则不会?另外,自从num
is an Int!
,难道我不能像平常一样对待它吗?Int
?最后,自从一个Int!
应该像普通人一样对待Int
,我怎样才能在第三个例子中打开它?谢谢。
此错误发生在所有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
从不采取nil
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)