在swift 3.0中使用指定给可选变量?运算符返回nil

在swift 3.0中使用指定给可选变量?运算符返回nil,swift,optional,Swift,Optional,考虑以下代码 var a:Int? a? = 10 print(a) 这里变量a没有被赋值为10。如果是因为“?”运算符,为什么编译器不显示编译错误 试试这个 var a:Int? a = 10 print(a) 嗯 ?(可选)表示变量可能包含nil值,而!(unwrapper)表示在运行时使用(试图从中获取值)变量时,该变量必须具有内存(或值) 主要区别在于,当可选值为nil时,可选链接会正常失败,而当可选值为nil时,强制展开会触发运行时错误 var defaultNil : I

考虑以下代码

var a:Int?

a? = 10

print(a)
这里变量a没有被赋值为10。如果是因为“?”运算符,为什么编译器不显示编译错误

试试这个

var a:Int?

a = 10

print(a)

?(可选)表示变量可能包含nil值,而!(unwrapper)表示在运行时使用(试图从中获取值)变量时,该变量必须具有内存(或值)

主要区别在于,当可选值为nil时,可选链接会正常失败,而当可选值为
nil
时,强制展开会触发运行时错误

var defaultNil : Int?  // declared variable with default nil value
println(defaultNil) >> nil  

var canBeNil : Int? = 4
println(canBeNil) >> optional(4)

canBeNil = nil
println(canBeNil) >> nil

println(canBeNil!) >> // Here nil optional variable is being unwrapped using ! mark (symbol), that will show runtime error. Because a nil optional is being tried to get value using unwrapper

var canNotBeNil : Int! = 4
print(canNotBeNil) >> 4

var cantBeNil : Int = 4
cantBeNil = nil // can't do this as it's not optional and show a compile time error

通常不要在赋值左边的变量处使用感叹号和问号。@Bibin p Sebastian仍然,您对swift中的可选(?)有任何混淆吗?@Bibin p Sebastian您在技术上是在为可选的未包装变量赋值。那是什么?计算结果为nil,您正试图分配给nil(即nil=10)。这有意义吗。就编译器而言,它是一个有效的语句。比较