[Swift A]-問號&感嘆號


1.必須賦值的變量,或普通變量

var month:Int
println("month:\(month)")

 上面這2句代碼會提示報錯,因為沒有賦值

2.再看看如下寫法

var month:Int?
println("month:\(month)")

 打印的值為:month:nil 

 即java里面的null

3.再看看這個代碼

var month:Int!
println("month:\(month)")

 輸出的和2一樣

4.總結1

問號和感嘆號都可以標識變量為可選變量或可空變量

5.問號和感嘆號的區別

var year:Int = 2014;

var month:Int?
println("month:\(month)")

year = month

 輸出:month:nil

          fatal error: Can't unwrap Optional.None

.....

 

var year:Int = 2014;

var month:Int? = 12;
println("month:\(month)")

year = month!

 上面這個代碼就可以正常運行

如果把感嘆號換成問號就會提示錯誤

 

 

6.總結2

!可取可選變量的非空值,?就不可以這樣

7.可選變量可以當條件來使用(非空為真,空為假),而普通變量不行

 

var a:Int?
if a {
    println("1");
} else {
    println("2");
}

 8.可選變量的類型轉換

代碼1:

var a:String? = "22"
println("a:\(a?.toInt())");

 代碼2:

var a:String?
println("a:\(a!.toInt())");

 代碼3:

var a:String?
println("a:\(a?.toInt())");

 解釋:?有點類似java里面的 a == false ? "false" :"true" 。 代碼1能正常運行,代碼2是強制拿a的值去轉換,而代碼3里就不會了,而是判斷下為不為空,如果為空就不執行轉換。

 

有人直接把?表示為判斷解析,!表示為強制解析


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM