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)
我的问题是为什么第一位代码断开,第二位和第三位代码没有?另外,既然num是Int!,我不应该像常规一样对待它Int吗?最后,由于a Int!应该像常规一样对待Int,我怎么能在第三个例子中解开呢?谢谢.
所有参数都会出现此错误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
| 归档时间: |
|
| 查看次数: |
1449 次 |
| 最近记录: |