if條件分支
var i = 10
if i > 0
{
print("Hello World")
}
- 小結(jié)
-
Swift
中沒(méi)有C
語(yǔ)言中的非零即真概念 - 在邏輯判斷時(shí)必須顯式地指明具體的判斷條件
-
if
語(yǔ)句條件的()
可以省略,但是{}
不能省略
-
三目運(yùn)算符
var a = 10
var b = 50
var result = a > b ? a : b
print(result)
注意問(wèn)號(hào)前一定要有空格, 條件也只能是Bool類(lèi)型
可選項(xiàng)
例1
let url = NSURL(string: "http://www.baidu.com/")
if url != nil {
NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, _, _) -> Void in
print(NSString(data: data!, encoding: NSUTF8StringEncoding))
}).resume()
}
- 小結(jié)
- 在 Swift 中,不是所有的對(duì)象實(shí)例化方法都會(huì)返回值物遇,在實(shí)際開(kāi)發(fā)中需要注意實(shí)例化函數(shù)的返回類(lèi)型窖张,例如:
convenience init?(string URLString: String)
如果有 ? 表示改方法有可能無(wú)法實(shí)例化到正確的對(duì)象
這種函數(shù)返回的對(duì)象梢褐,被稱(chēng)為 可選項(xiàng),即有可能有值挥萌,也有可能沒(méi)有值
-實(shí)際開(kāi)發(fā)時(shí)堂污,需要針對(duì)這種對(duì)象加以判斷恩脂,并且在分支內(nèi)部使用 !,指明改對(duì)象確實(shí)是存在的相比在 OC 的開(kāi)發(fā)楷拳,尤其在日常練習(xí)時(shí)绣夺,會(huì)給定一個(gè)能夠運(yùn)行的值,而在實(shí)際運(yùn)行時(shí)欢揖,一旦條件不滿(mǎn)足陶耍,會(huì)直接閃退,這樣用戶(hù)體驗(yàn)會(huì)非常不好.
例2
//可選綁定
if let url = NSURL(string: "www.baidu.com")
{
NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: { (data, _, _) in
print(String(data: data!, encoding: NSUTF8StringEncoding))
}).resume()
}
- 小結(jié)
- 使用
if let 常量 = 可選構(gòu)造函數(shù)
的方式能夠確保分支內(nèi)部常量一定是有值的(可選綁定
),并且在分支內(nèi)部不再需要使用!
-
可選綁定
是 Swift 代碼中的一個(gè)非常重要的使用技巧 - 盡管 Swift 提供了類(lèi)型校驗(yàn)的手段她混,但是要寫(xiě)出 優(yōu)雅 的 Swift 代碼烈钞,還是需要多加練習(xí)的,否則一不小心就會(huì)出現(xiàn)分支嵌套層次很深的代碼
- 有關(guān)
?
和!
的選擇坤按,可以借助Xcode
的輔助工具毯欣,但是強(qiáng)烈建議每次遇到提示時(shí),要多加思考臭脓,反復(fù)揣摩.
- 使用
例3
var name: String?
print(name?.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
name = "zhangsan"
print(name?.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
let l = 10
print(l + (name?.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) ?? 0))
//打印結(jié)果為18 ,如果注釋name = "zhangsan" 則打印10
- 小結(jié)
-
??
是一個(gè)非常有用的操作符酗钞,能夠快速對(duì) nil 進(jìn)行判斷 - 如果對(duì)象是
nil
,則使用??
后面的值代替前面的nil
值參與計(jì)算 - 在使用
??
時(shí)来累,整個(gè)部分需要使用 () 包裝 - 這一技巧在
UITableView
的數(shù)據(jù)源
方法中尤為重要
-
循環(huán)
- OC for循環(huán)
// OC的for:
for (int i = 0; i < 5; i++) {
NSLog(i)
}
- Swift 常規(guī)寫(xiě)法
這種寫(xiě)法即將被廢棄
Snip20160411_3.png
for var i = 0; i < 10; i++ {
print(i)
}
- Swift 推薦寫(xiě)法
//代表 I的取值為0 - 9
for i in 0 ..< 10
{
print(i)
}
//代表i的取值為 0 - 10
for i in 0 ... 10 {
print(i)
}
范圍運(yùn)算符
... 閉合范圍運(yùn)算符 表示 a 到 b, [a, b] 0-5, 包含a,也包含b
..< 半閉合范圍運(yùn)算符 表示 a 到 b, [a, b) 0-4, 包含a,但是不包含b
運(yùn)算符左右要不就都不要空格,要不就都空格
- 省略下標(biāo)
- _表示忽略對(duì)應(yīng)位置的值,執(zhí)行代碼6次
for _ in 0...5 {
print("hello")
}
switch
判斷學(xué)生分?jǐn)?shù)
/*:
判斷分?jǐn)?shù):
90-99: 優(yōu)秀
80-89: 良好
70-79: 中等
60-69: 及格
60以下: 不及格
*/
let score = 89
switch (score / 10)
{
case 9 :
print("優(yōu)秀")
case 8 :
print("良")
//如果要執(zhí)行下一個(gè)case需要使用fallthrough 關(guān)鍵字
fallthrough
case 7:
print("中")
case 6:
print("及格")
default:
print("不及格")
}
switch通過(guò)區(qū)間匹配
let score = 80
switch (score) {
case 90 ... 100 :
print("優(yōu)秀")
case 80 ..< 90 :
print("良")
case 70 ..< 80 :
print("中")
fallthrough
case 60 ..< 70:
print("及格")
default:
print("不及格")
}
匹配字符串
/*
Monday 星期一
Tuesday 星期二
Wednesday 星期三
Thursday 星期四
Friday 星期五
Saturday 星期六
Sunday 星期日
*/
let weekDay = "Tuesday"
switch (weekDay) {
case "Monday" :
print("是星期一呀")
case "Tuesday":
print("是星期二呀")
default :
print("隨便了")
}
- 小結(jié)
-
switch
可以對(duì)Float, Bool, String, Int, 枚舉
進(jìn)行判斷 - 不再需要
break
- 要處理所有可能的情況砚作,不然編譯器直接報(bào)錯(cuò),不處理的條件可以放在
default
分支中 - 穿透下一個(gè)使用fallthrough關(guān)鍵字
-