<1>.常量與變量
1. let 常量 -> 一經(jīng)賦值不允許再次修改
2. var 變量 -> 賦值后還可以再次修改
3. 在swift里面如果不指定類型有自動(dòng)類型推到 , 查看類型 -> option + 鼠標(biāo)左鍵
4. 建議 先使用let,在需要修改的時(shí)候使用var
func demo() {
let a = 10
print(a)
var b = 5
print(b)
b = 10
print(b)
let c: Int = 2
let d: Double = 1.2
let result = c + Int(d)
print(result)
}
<2>.可選類型
1. 可選類型定義的常量或者變量可能有值,也可能為nil
2. 可選類型定義的變量或者常量不能直接參與計(jì)算 (進(jìn)行解包才能計(jì)算)
3. 表現(xiàn)形式 類型后面加上?, 比如 Int?
4. '!'表示給可選類型的變量或者常量進(jìn)行強(qiáng)制解包, 要向系統(tǒng)保證我的值的一定在,有值
func demo() {
let a: Int? = 4
let b: Int = 3
// 1.向可選類型的值為nil進(jìn)行強(qiáng)制解包程序會(huì)崩潰,報(bào)出以下錯(cuò)誤
// fatal error: unexpectedly found nil while unwrapping an Optional value
if a != nil {
let result = a! + b
print(result)
}
// 2.使用空合并運(yùn)算符 ??
// 使用 ?? 判斷可選類型a 是否有值,如果有值使用該值進(jìn)行計(jì)算, 沒有值(nil)使用?? 后面提供的默認(rèn)值0
let result = (a ?? 0) + b
print(result)
// 3.變量可選類型 -> 變量的可選類型如果沒有設(shè)置值,那么默認(rèn)值為nil
var c: Int?
print(c)
// 4.常量的可選類型沒有默認(rèn)值,可以設(shè)置默認(rèn)值nil
let d: Int? = nil
print(d)
// 5.只有可選類型才能接收nil值
//let num: String = nil
}
<3>控制語句
func demo() {
// (1).if 條件判斷
/*
1. 可以省略小括號(hào)'()'
2. '{}'只有一行代碼也不能省略
3. 沒有非0即真的概念 只能判斷bool類型的值,只能有true/false
*/
let num = 1
if num > 0 {
print(num)
}
// (2).判斷可選類型
/*
1. if let 與 guard let 語意相反
2. guard let比if let少一層嵌套, 可讀性會(huì)更強(qiáng)
*/
// 提供可選類型的參數(shù)
let a: Int? = 5
// 提供了一個(gè)if let判斷
// if let 判斷可選類型是否有值,有值把值給value 然后執(zhí)行if let語句
if let value = a {
// 代碼執(zhí)行到此,value一定有值,就不是可選類型了
print(value)
}
// 確保value一定有值,如果沒有值執(zhí)行else語句
guard let value = a else {
print("a 為 nil")
return
}
// 執(zhí)行到此value一定有值
print(value)
// (3).可選類型條件的判斷
let url:URL? = URL(string: "http://www.baidu.com")
if url != nil {
if url?.host == "www.baidu.com" {
print("right")
}
}
// if let 條件判斷 2.0 的時(shí)候使用where關(guān)鍵字添加條件, 3.0 改成','
if let u = url,u.host == "www.baidu.com"{
print("ok")
}
// (4).擴(kuò)展 多個(gè)可選類型多個(gè)條件的判斷
let name: String? = "puppy"
let age: Int? = 1
// 2.0 可以省略第二個(gè)let 或者 var, 3.0 必須指定類型
// ',' 分割多個(gè)可選類型判斷
if let n = name, let a = age {
print(n,a)
}
// 條件之間可以 '&&', '||'
if let n = name, let a = age,n == "puppy" && a == 1 {
print("身份正確")
}
// (5).switch 判斷
/*
1. 可以省略break
2. 可以判斷任意類型
3. 省略小括號(hào)'()'
4. case語句里面定義變量或者常量不需要指定作用域
5. case可以判斷多個(gè)參數(shù)
6. case后面可以加where條件
7. case后面必須要有值可執(zhí)行語句 , 可以使用break
8. 擴(kuò)展 想要貫穿 'fallthrough' 前提后面的case 不能定義變量或者常量
*/
let hobby: String = "跑步"
let km: Int = 10 //一次跑步里程
switch hobby {
case "引體向上" :
print("強(qiáng)壯的虎頭肌")
case "仰臥起做" :
print("完美八塊")
case "跑步" where km > 5:
print("性感的大長腿")
default:
print("運(yùn)動(dòng)小白")
}
}