Swift.png
1.可選類型的簡單介紹
- 可選類型:一個變量录语,可能有值蝇庭,也可能沒有值
- 可選類型也是一種數(shù)據(jù)類型(像 Int,Float)
- 只有可選類型才能賦值為nil
- 在Swift中揪漩,nil表示沒有值畜眨,一個特殊含義的字符
- 非可選類型鸣驱,代表無論在什么時候泛鸟,在哪里都是有值的
- 在OC開發(fā)中,如果一個變量暫停不使用,可以賦值為0(基本屬性類型)或者賦值為空(對象類型)
2.可選類型定義和使用
2.1聲明
- 定義聲明,在
需要聲明的變量后面添加?
- 方式二
var num: Optional<Int> = xxx
// 定義的第一種方式
var num:Optional<Int> = 2;
print(num);
// 打印結(jié)果:"Optional(2)\n"
//定義的第2種方式
var num2:Int? = 3;
2.2可選類型的使用
- 在使用的時候需要解析
!
為強(qiáng)制解析 - 可選綁定 解析
- guard守護(hù) 解析
var num2:Int? = 3;
//錯誤的寫法,可選類型 不可以直接操作
// num2 += 4;
//1.必須解包 !:表示強(qiáng)制解包
num2 ! + = 4
//上面的寫法 還是有問題的 因?yàn)?可選類型 可以nil
if num2 != nil {
num2! += 4;
}
// 2.可選綁定
if var result = num2 {
print(result);
}
//打印結(jié)果:4
//可選綁定的原理: 首先判斷num2是否為nil,如果是踊东,那么if的條件是false,跳過 {}北滥,如果不是nil勺美,if的條件為true,會把num2強(qiáng)制解包,賦值給result
//3.函數(shù)使用
func test(score: Int?) -> Void{
if var s = score {
print(s);
s += 4;
print(s);
}
}
test(score: 3);
// 使用 guard 復(fù)習(xí)一下
/*
1. guard必須使用在函數(shù)里面
2. guard語句必須帶有else語句
2.1 當(dāng)條件表達(dá)式為true的時候跳過else語句中的內(nèi)容碑韵,執(zhí)行語句組內(nèi)容
2.2 條件表達(dá)式為false的時候執(zhí)行else語句中的內(nèi)容赡茸,跳轉(zhuǎn)語句一般是return、break祝闻、continue和throw
*/
func test1(score: Int?) -> Void{
guard var s = score else {
print("為nil")
return;
}
s+=1;
print(s);
}
test1(score: 3);
/* These methods expect their string arguments to contain any percent escape codes that are necessary. It is an error for URLString to be nil.
*/
public convenience init?(string URLString: String)
//從上面的解釋中可以理解到 這個方法有可能會返回 nil
let url = NSURL(string:"www.baidu.com");
//正確的方式 ---使用可選類型
let url : NSURL? = NSURL(string: "www.baidu.com")
//判斷不為nil時
if let tempUrl = url {
let request = NSURLRequest(URL: tempUrl)
}
總結(jié): 可選類型 解析的方式有4種
- 直接判斷 + 強(qiáng)制解包
- 可選綁定
- guard守護(hù)
- 空合運(yùn)算 ?? (三目運(yùn)算的原理一樣)