以擼代碼的形式學習Swift-5:控制流(Control Flow)

1 for in

for in 可用來遍歷 Array Dictionary Set Range String

for index in 1...5 {
}
for _ in 1...5 {
}
for v in [1,2,3] {
}
let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
}
let countrys:Set = ["China", "USA", "Japan"]
for country in countrys {
}
for s in "andyron" {
}

2 while

var i = 1
while i > 10 {
    // ...
    i += 1
}
// repeat-while 類似其他語言的 do-while 
repeat {
    // ...
    i += 1
} while  i > 10

3 if

var temperatureInFahrenheit = 30
if temperatureInFahrenheit <= 32 {
    print("It's very cold. Consider wearing a scarf.")
} else if temperatureInFahrenheit >= 86 {
    print("It's really warm. Don't forget to wear sunscreen.")
} else {
    print("It's not that cold. Wear a t-shirt.")
}

4 switch

不存在隱式的貫穿(No Implicit Fallthrough),不需要break

let anotherCharacter: Character = "a"
switch anotherCharacter {
case "a", "A":
    print("The letter A")
default:
    print("Not the letter A")
}
// 區(qū)間匹配
let approximateCount = 62
let countedThings = "moons orbiting Saturn"
var naturalCount: String
switch approximateCount {
case 0:
    naturalCount = "no"
case 1..<5:
    naturalCount = "a few"
case 5..<12:
    naturalCount = "several"
case 12..<100:
    naturalCount = "dozens of"
case 100..<1000:
    naturalCount = "hundreds of"
default:
    naturalCount = "many"
}
// 元組匹配
let somePoint = (1, 1)
switch somePoint {
case (0, 0):
    print("(0, 0) is at the origin")
case (_, 0):
    print("(\(somePoint.0), 0) is on the x-axis")
case (0, _):
    print("(0, \(somePoint.1)) is on the y-axis")
case (-2...2, -2...2):
    print("(\(somePoint.0), \(somePoint.1)) is inside the box")
default:
    print("(\(somePoint.0), \(somePoint.1)) is outside of the box")
}
// 值綁定(Value Bindings)
let anotherPoint = (2, 0)
switch anotherPoint {
case (let x, 0):
    print("on the x-axis with an x value of \(x)")
case (0, let y):
    print("on the y-axis with a y value of \(y)")
case let (x, y):
    print("somewhere else at (\(x), \(y))")
}
// case分句中使用where
let yetAnotherPoint = (1, -1)
switch yetAnotherPoint {
case let (x, y) where x == y:
    print("(\(x), \(y)) is on the line x == y")
case let (x, y) where x == -y:
    print("(\(x), \(y)) is on the line x == -y")
case let (x, y):
    print("(\(x), \(y)) is just some arbitrary point")
}
// 復合匹配
// 當多個條件可以使用同一種方法來處理時薄坏,可以將這幾種可能放在同一個case后面择浊,并且用逗號隔開。
let stillAnotherPoint = (9, 0)
switch stillAnotherPoint {
case (let distance, 0), (0, let distance):
    print("On an axis, \(distance) from the origin")
default:
    print("Not on an axis")
}

5 控制轉移語句(Control Transfer Statements): continue break fallthrough return throw

貫穿(Fallthrough) 執(zhí)行完一個case后刹碾,繼續(xù)向下執(zhí)行

let integerToDescribe = 5
var description = "The number \(integerToDescribe) is"
switch integerToDescribe {
case 2, 3, 5, 7, 11, 13, 17, 19:
    description += " a prime number, and also"
    fallthrough
default:
    description += " an integer."
}

6 guard 與 if

功能類似。區(qū)別:1 guard減少嵌套座柱,會簡潔 2 解包時迷帜,guard的結果作用域不限于本身。

// greet(person: ["name": "Jane", "location": "Cupertino"])
func greet(person: [String: String]) {
    if let name = person["name"] {
        print("Hello \(name)!")
        
        if let location = person["location"] {
            print("I hope the weather is nice in \(location).")
        } else {
            print("I hope the weather is nice near you.")
        }
    } else {
        print("Hello stranger!")
    }
//    print(name)       //name的作用于只限于if中
}
func greet2(person: [String: String]) {
    guard let name = person["name"] else {
        print("Hello stranger!")
        return
    }
    print("Hello \(name)!")
    
    guard let location = person["location"] else {
        print("I hope the weather is nice near you.")
        return
    }
    print("I hope the weather is nice in \(location).")
}

7 檢測 API 可用性

if #available(iOS 10, macOS 10.12, *) {
    // 在 iOS 使用 iOS 10 的 API, 在 macOS 使用 macOS 10.12 的 API
} else {
    // 使用先前版本的 iOS 和 macOS 的 API
}

playground文件在andyRon/LearnSwift

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末色洞,一起剝皮案震驚了整個濱河市戏锹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌火诸,老刑警劉巖锦针,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異置蜀,居然都是意外死亡奈搜,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門盯荤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馋吗,“玉大人,你說我怎么就攤上這事秋秤『暝粒” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵灼卢,是天一觀的道長绍哎。 經(jīng)常有香客問我,道長鞋真,這世上最難降的妖魔是什么蛇摸? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮灿巧,結果婚禮上赶袄,老公的妹妹穿的比我還像新娘揽涮。我一直安慰自己,他們只是感情好饿肺,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布蒋困。 她就那樣靜靜地躺著,像睡著了一般敬辣。 火紅的嫁衣襯著肌膚如雪雪标。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天溉跃,我揣著相機與錄音村刨,去河邊找鬼。 笑死撰茎,一個胖子當著我的面吹牛嵌牺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播龄糊,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼逆粹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了炫惩?” 一聲冷哼從身側響起僻弹,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎他嚷,沒想到半個月后蹋绽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡筋蓖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年卸耘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扭勉。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖苛聘,靈堂內(nèi)的尸體忽然破棺而出涂炎,到底是詐尸還是另有隱情,我是刑警寧澤设哗,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布唱捣,位于F島的核電站,受9級特大地震影響网梢,放射性物質(zhì)發(fā)生泄漏震缭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一战虏、第九天 我趴在偏房一處隱蔽的房頂上張望拣宰。 院中可真熱鬧党涕,春花似錦、人聲如沸巡社。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晌该。三九已至肥荔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間朝群,已是汗流浹背燕耿。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姜胖,地道東北人誉帅。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像谭期,于是被迫代替她去往敵國和親堵第。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容