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
.
我了解可选值的工作原理,但这让我陷入了困境。我有一个名为 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
.