override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//函數(shù)流
//Swift 提供了多種流程控制結(jié)構(gòu),包括可以多次執(zhí)行任務(wù)的while循環(huán),基于特定條件選擇執(zhí)行不同代碼分支的if,guard和switch語(yǔ)句 還有控制流程跳轉(zhuǎn)到其他代碼位置的break 和continue語(yǔ)句
//Swift 還提供了for,in 用來(lái)更簡(jiǎn)單的遍歷數(shù)組array 字典dictionary ,區(qū)間range 字符串集string 和其他序列類型 Set
//Swift的switch語(yǔ)句比c語(yǔ)言中更加強(qiáng)大,case 還可以匹配很多不同的模式,包括范圍匹配,元組tuple和特定類型匹配,switch的case中匹配的值可以聲明為臨時(shí)常量或變量,在case作用域內(nèi)使用,也可以配合where 來(lái)描述更復(fù)雜的匹配條件
//for in循環(huán) 可以使用forin 循環(huán)來(lái)遍歷一個(gè)集合中的所有元素,例如數(shù)組中的元素,范圍內(nèi)的數(shù)字或者字符串中的字符
let names = ["nihao","hellp","world"]
for str in names{
print(str)
}
let dict = ["a":"1","b":"2","c":"3"]
//遍歷字典
for (key,value) in dict{
print("\(key) : \(value)")
}
//若按順序遍歷字典 沒(méi)有多大意義 多數(shù)用在傳參
//若順序遍歷 如果key是 中文 那就借助三方庫(kù)
for key in dict.keys.sorted(){
print("\(key) = \(dict[key])")
}
//使用 ... 表示一個(gè)區(qū)間,從0 到 5 ...表示閉區(qū)間操作符
for num in 0...5{
print(num)
}
//使用..< 表示從開(kāi)始位置到 小于的數(shù) 不包含小于的數(shù)
for num in 0..<10{
print(num)
}
for index in 1...5 {
print("\(index) times 5 is \(index * 5)")
}
//在例子中,index 是一個(gè)每次循環(huán)遍歷開(kāi)始時(shí)被自動(dòng)賦值的常量,這種情況下,index 在使用前不需要聲明,只需要將它包含在循環(huán)聲明中,就可以對(duì)其進(jìn)行隱式聲明,而無(wú)需使用let關(guān)鍵字聲明
//如果只單純的想用下循環(huán) 來(lái)干別的變量的事 則不需要?jiǎng)?chuàng)建默認(rèn)常量, 使用 (_)來(lái)替代變量名忽略這個(gè)值
let base = 3
let num = 1
var result = 1
for _ in 0...num{
result *= base
}
print(result)
//使用stride(form:to:by:)函數(shù)來(lái)跳過(guò)不需要的標(biāo)記 stride跨過(guò),步幅
let skip = 5
for num in stride(from: 0, to: 60, by: skip){
print(num)
}
//會(huì)從初始值開(kāi)始
//也可以在閉區(qū)間用 Stride(form:through:by:) 起到同樣作用
for bun in stride(from: 0, through: 12, by: 3){
print(bun)
}
//while 循環(huán)會(huì)一直巡行到一段語(yǔ)句知道條件編程false 。這類循環(huán)適合使用在第一次迭代前,迭代次數(shù)位置的情況下,swift 提供兩種while 循環(huán)形式
//while循環(huán),每次在循環(huán)開(kāi)始時(shí)計(jì)算條件是否符合
//repeat-while循環(huán),每次在循環(huán)結(jié)束時(shí)計(jì)算條件是否符合
var number = 1;
while number <= 10 {
number += 2
print(number)
}
let finaly = 25
var board = [Int](repeating: 0, count: finaly + 1) //這是創(chuàng)建一個(gè)初始數(shù)組啊 學(xué)到了 創(chuàng)建25+1 個(gè) 每個(gè)都是0
print(board)
board[03] = +08; board[06] = +11; board[09] = +09; board[10] = +02
board[14] = -10; board[19] = -11; board[22] = -02; board[24] = -08
var square = 0
var diceroll = 0
while square < finaly {
diceroll += 1
if diceroll == 7 {
diceroll = 1
}
square += diceroll
if square < board.count{
square += board[square]
}
}
//md 直接給個(gè)棋盤游戲來(lái)解釋說(shuō)明 不清楚游戲的 還真有點(diǎn)懵逼 就是記錄當(dāng)前在多少格 符合定好的點(diǎn) 就加減對(duì)應(yīng)的點(diǎn)的值 直到走到末尾格為止
//Repeat-while while 循環(huán)的另一種形式是repeat-while 它和while的區(qū)別實(shí)在判斷循環(huán)條件之前,先執(zhí)行一次循環(huán)的代碼塊,然后重復(fù)循環(huán)直到條件為false
//Swift 語(yǔ)言 repeat-while 與 其他語(yǔ)言中 do-while 循環(huán)是類似的
var counts = 0
repeat{
counts += 1
} while counts <= 11
print(counts)
// repeat-while語(yǔ)句 會(huì)比while 語(yǔ)句省去數(shù)組越界的檢查 現(xiàn)在repeat 語(yǔ)句中取出數(shù)組 看情況而定
//swift 提供兩種類型的條件語(yǔ)句 if語(yǔ)句和switch語(yǔ)句,通常,當(dāng)條件較為簡(jiǎn)單且可能的情況很少時(shí)用if語(yǔ)句,而switch語(yǔ)句更適用于條件較復(fù)雜,有更多排列的時(shí)候,并且switch在需要用到模式匹配(pattern-matching)的情況下回更有用
var testnum = 30
if testnum <= 32{
print("太簡(jiǎn)單了 就是小于32")
}
//如果是真則執(zhí)行第一個(gè)語(yǔ)句
if testnum <= 26{
print("夏天26度舒適")
}else if(testnum >= 30){
print("空調(diào)極限")
}
//當(dāng)不需要完整判斷情況的時(shí)候,最后的else 語(yǔ)句是可選的
//Switch
//switch語(yǔ)句會(huì)嘗試把某個(gè)值與若干個(gè)模式進(jìn)行匹配。根據(jù)第一個(gè)匹配陳賡模式 ,switch語(yǔ)句執(zhí)行對(duì)應(yīng)的代碼,當(dāng)有可能的情況較多時(shí),通常用switch 語(yǔ)句替換if語(yǔ)句
var switchnum = 2
switch switchnum {
case 1:
print("1")
case 2,
3:
print("2||3")
case 4:
print("4")
case 5:
print("5")
default:
break
}
//當(dāng)寫完時(shí),發(fā)現(xiàn)警告已經(jīng)告訴我 除了 case 2 3 其他行的打印不會(huì)被執(zhí)行 這判斷能力有點(diǎn)強(qiáng) 直接幫我匹配完了
//每行不需要寫上break 若多個(gè)匹配用同一個(gè)結(jié)果時(shí),需在條件后加,逗號(hào)來(lái)隔開(kāi)再 :冒號(hào)匹配
//switch 語(yǔ)句由多個(gè)case 構(gòu)成,每個(gè)由case 關(guān)鍵字開(kāi)始,為了匹配某些更特定的值,swift提供了幾種方法來(lái)進(jìn)行更復(fù)雜的模式匹配,這些模式將在本節(jié)的稍后部分提到
//與if語(yǔ)句類似,每一個(gè)case都是代碼執(zhí)行的一條分支,switch會(huì)決定那一條分支應(yīng)該被執(zhí)行,這個(gè)流程被稱作根據(jù)給定的值切換。
//switch語(yǔ)句必須是完備的,這就是說(shuō),每一個(gè)可能的值都必須至少有一個(gè)case分支與之對(duì)應(yīng),在某些不可能涵蓋所有值得情況下,你可以使用默認(rèn)分支來(lái)涵蓋其它所有沒(méi)有對(duì)應(yīng)的值,這個(gè)默認(rèn)分支必須在switch語(yǔ)句的最后面
let someCharacter: Character = "z"
switch someCharacter {
case "a":
print("The first letter of the alphabet")
case "z":
print("The last letter of the alphabet")
default:
print("Some other character")
}
//若寫了default: 那就得必須寫完整或者不寫任何自己的語(yǔ)句、要寫上break
//為什么會(huì)翻譯成 不存在隱式的貫穿 很是不理解這個(gè)名字
//與c 和oc 的switch 語(yǔ)句不同,當(dāng)匹配的case 分支中的代碼執(zhí)行完成后,程序會(huì)終止switch語(yǔ)句,而不會(huì)繼續(xù)執(zhí)行下一個(gè)case 語(yǔ)句,這也就是說(shuō),不需要再case分支中顯式使用break語(yǔ)句。這使得switch語(yǔ)句更安全,更易用,也避免了因忘寫了break語(yǔ)句而產(chǎn)生的錯(cuò)誤。
//雖然swift中 break 不是必須的,但依然可以寫
//每個(gè)case 分支必須包含一個(gè)語(yǔ)句 若寫了case value: 后面什么也不寫 會(huì)報(bào)錯(cuò)
//為了讓單個(gè)case 同時(shí)匹配兩個(gè)值,可以將兩個(gè)值組合成一個(gè)符合匹配,并且用逗號(hào)分開(kāi)
let anotherCharacter: Character = "a"
switch anotherCharacter {
case "a", "A": //可以寫在一行里 也可以分行寫以便可讀性
print("The letter A")
default:
print("Not the letter A")
}
//case 分支模式也可以是一個(gè)值得區(qū)間,下面的例子展示了如何使用區(qū)間匹配來(lái)輸出任意數(shù)字對(duì)應(yīng)的自然語(yǔ)言格式
let casenumber = 31
let casestr : String
//因?yàn)閏asestr 是沒(méi)有默認(rèn)值,是可選值,若是var 則隨便 若給賦了初始值 則不能匹配
switch casenumber {
case 0:
casestr = "0"
case 1..<5:
casestr = "1-5"
case 5..<20:
casestr = "5-20"
case 20..<40:
casestr = "20-40"
default:
break
}
//case 也可以匹配元組 或者元組中的區(qū)間
//使用 _ 下劃線 來(lái)匹配所有可能的值
let somerange = (1,0)
switch somerange {
case (0,0):
print("匹配0,0")
case (_,0):
print("匹配 _,0")
case (0,_):
print("匹配 0,_")
case (-2...2,-2...2):
print("匹配一個(gè)區(qū)間的范圍")
default:
break
}
//值綁定
//case 分支允許將匹配的值聲明為臨時(shí)常量或變量,并且在case分支體內(nèi)使用, -- 這種行為被稱為值綁定(value binding),因?yàn)槠ヅ涞闹翟赾ase 分支體內(nèi),與臨時(shí)的常量或變量綁定
let point = (2,0)
switch point {
case (let x ,0):
print("case first \(x)")
case (0,let y):
print("case scond \(y)")
case let (x,y):
print("case x=\(x) y = \(y)")
default:
break
}
//式子中 let x 或者 let y 或者 let(x,y) 可以理解為 _ 匹配任意值, let (_,_)
//可以 將上面的式子 理解 寫成下面的式子
let point1 = (2,0)
switch point1 {
case (_ ,0):
print("case first")
case (0,_):
print("case scond")
case let (_,_):
print("case all")
//因?yàn)橐呀?jīng)寫出了匹配 所有 就不會(huì)在走 default語(yǔ)句 除非 數(shù)據(jù)項(xiàng)格式不對(duì)
default:
break
}
//case 的分支判斷中 可以使用 Where 來(lái)判斷額外條件
let testpoint = (1,-1)
switch testpoint {
case let (x,y) where x == y: //理解為 匹配所有 并且 x 與 y相等
print("\(x),\(y) where is x == y")
case let (x,y) where x == -y: //理解為 匹配所有 并且 x 與 -y相等
print("\(x),\(y) where is x == -y")
case let (x, y): //匹配任何值
print("(\(x), \(y)) is just some arbitrary point")
default:
break
}
//一開(kāi)始想著 直接case 判斷語(yǔ)句 下面這語(yǔ)句 既然都知道要匹配的值是真是假了 干嘛還要用匹配很傻缺
//所以 case 分支 是可以寫成判斷語(yǔ)句的
let textcode = 1
var boolvalue : Bool = true
switch boolvalue {
case textcode >= 5:
print("case first")
case textcode <= 5:
print("case second")
default:
break
}
var string = "default"
//do sth change string value
//然后 匹配string 值
//下面的式子是錯(cuò)誤 匹配string 所以case 匹配的表達(dá)式 都應(yīng)該是給一個(gè)string類型的值出來(lái) 不能是別的值 所以還是用where 來(lái)表示
// switch string {
// case string.isEmpty:
// <#code#>
// default:
// <#code#>
// }
//where 后面加判斷 加操作式 但是where 后面還是要跟表達(dá)式
switch string {
case let emptyStr where string.isEmpty:
print("null string")
case let defaultStr where string == "de":
print("default")
case let changeStr where changeStr[...changeStr.index(changeStr.endIndex, offsetBy: -1)] == "default" :
print("匹配到了 \(changeStr)")
default:
break
}
//還是要拋棄我這種 亂七八糟的想法
//理解為 先將let 常量 變?yōu)槠ヅ涞闹担缓竽贸A糠诺?where 后面的判斷語(yǔ)句中,且當(dāng)語(yǔ)句條件為true 是,匹配到的分支才會(huì)被執(zhí)行
//復(fù)合匹配
let char : Character = "a"
switch char {
case "a","b","c":
print("case first")
case "a","e","f": //此時(shí)xcode 已經(jīng)給出警告說(shuō) ”a“ 已經(jīng)被判斷過(guò)了,無(wú)序再寫,所以只會(huì)匹配一次
print("case second")
default:
break
}
//復(fù)合匹配同樣包含值綁定,
let yuanzu = (10,10)
switch yuanzu {
case (let case1 ,10),(10,let case1):
// case (let case1 ,10),(10,let case2): //本來(lái)寫成兩種 常量 但是xcode 會(huì)報(bào)錯(cuò) 說(shuō)case1 必須在所有的匹配元素中,意思是復(fù)合匹配的每個(gè)綁定值必須是同一個(gè) 變量或常量的名字 不能重復(fù)的創(chuàng)建
print("x =\(case1) y = \(case1)")
default:
break
}
//官方翻譯為 所有的分支體內(nèi) 只要任何一個(gè)匹配 都已獲取到 同樣的命名的值
//控制轉(zhuǎn)移語(yǔ)句
//包含 continue、break、fallthrough、return、throw
//continue 繼續(xù) 語(yǔ)句會(huì)告訴一個(gè)循環(huán)體like停止本次循環(huán) ,重新開(kāi)始下次循環(huán),就好像在說(shuō) 本次循環(huán)我已經(jīng)執(zhí)行完了,但是并不會(huì)離開(kāi)整個(gè)循環(huán)體
let world = "hello world"
var character = ""
for char in world{
switch char {
case "a","b","c","d":
continue
default:
character.append(char)
}
}
print(character)
//使用了continue 就直接跳出循環(huán),不在執(zhí)行后續(xù)代碼,重新下一次循環(huán)。
//break break 語(yǔ)句會(huì)立刻結(jié)束整個(gè)控制流的執(zhí)行,break 可以在switch 或循環(huán)語(yǔ)句中使用,用來(lái)提前結(jié)束switch或循環(huán)語(yǔ)句
//循環(huán)語(yǔ)句中的break 當(dāng)在一個(gè)循環(huán)中使用break 會(huì)立刻中斷該循環(huán)體的執(zhí)行,然后跳轉(zhuǎn)到表示循環(huán)體結(jié)束的大括號(hào)” } “后的第一行代碼,不會(huì)再有本次循環(huán)的代碼被執(zhí)行,也不會(huì)再有下次的循環(huán)產(chǎn)生。
//switch 語(yǔ)句中的break
//當(dāng)在一個(gè)switch 代碼塊中使用break時(shí),會(huì)立即中斷該switch代碼塊的執(zhí)行,并且跳轉(zhuǎn)到表示switch代碼塊結(jié)束的大括號(hào) “}”后的第一行代碼
//這種特性可以被用來(lái)匹配或者忽略一個(gè)或多個(gè)分支。因?yàn)閟wift的switch需要包含所有的分支,而且不允許有為空的分支,有時(shí)為了使你的意圖更明顯,需要特意匹配或者忽略某個(gè)分支。那么當(dāng)你想忽略某個(gè)分支時(shí),可以在該分支內(nèi)寫上break語(yǔ)句,當(dāng)那個(gè)分支被匹配到時(shí),分支內(nèi)的break語(yǔ)句立即結(jié)束switch 代碼塊
//當(dāng)一個(gè)switch分支僅僅包含注釋時(shí),會(huì)被報(bào)編譯錯(cuò)誤,注釋不是代碼語(yǔ)句而且也不能讓switch 分支打到忽略的效果,你應(yīng)該使用break 來(lái)忽略某個(gè)分支。
let numberSymbol: Character = "三" // 簡(jiǎn)體中文里的數(shù)字 3
var possibleIntegerValue: Int?
switch numberSymbol {
case "1", "?", "一", "?":
possibleIntegerValue = 1
case "2", "?", "二", "?":
possibleIntegerValue = 2
case "3", "?", "三", "?":
possibleIntegerValue = 3
case "4", "?", "四", "?":
possibleIntegerValue = 4
default:
break
}
if let integerValue = possibleIntegerValue {
print("The integer value of \(numberSymbol) is \(integerValue).")
} else {
print("An integer value could not be found for \(numberSymbol).")
}
// 輸出 "The integer value of 三 is 3."
//貫穿
//在swift 里,switch 語(yǔ)句不會(huì)從上一個(gè)case 分支跳轉(zhuǎn)到下一個(gè)case分支中,相反,只要第一個(gè)匹配的case分支完成了它所需要執(zhí)行的語(yǔ)句,整個(gè)switch代碼塊完成了它的執(zhí)行,相比之下。c語(yǔ)言要求你顯式的插入break語(yǔ)句到每個(gè)case分支的末尾來(lái)阻止自動(dòng)落入到下一個(gè)case分支.swift的這種避免默認(rèn)落入到下一個(gè)分支中的特性意味著它的switch功能要比c語(yǔ)言的更加清晰和可預(yù)測(cè),可以避免無(wú)意識(shí)的執(zhí)行多個(gè)case分支從而引發(fā)的錯(cuò)誤。
//如果你確實(shí)需要c風(fēng)格的貫穿的特性,你可以在每個(gè)需要改特性的case 分支中使用fallthrough關(guān)鍵字。下面的例子找那個(gè)使用fallthrough來(lái)創(chuàng)建一個(gè)數(shù)字的描述語(yǔ)句
let numm = 5
var nummdes = "number \(numm) is"
switch numm {
case 5,6,7,8:
nummdes += "get this"
fallthrough
case 5,7,8,9 :
nummdes += "get second"
default:
break
}
print(nummdes)
//fallthrough 不會(huì)默認(rèn)執(zhí)行break 結(jié)束整個(gè)switch 語(yǔ)句 會(huì)繼續(xù)走下一個(gè)case 語(yǔ)句 直到走完或者遇到break
//帶標(biāo)簽的語(yǔ)句 在swift中,你可以在循環(huán)和條件語(yǔ)句中嵌套循環(huán)體和條件語(yǔ)句來(lái)創(chuàng)造復(fù)雜的控制流結(jié)構(gòu),并且,循環(huán)體和條件語(yǔ)句都可以使用break語(yǔ)句來(lái)提前結(jié)束整個(gè)代碼塊,因此,顯式的指明break語(yǔ)句想要終止的是哪個(gè)循環(huán)體或者條件語(yǔ)句,會(huì)很有用,類似地,如果你有許多嵌套的循環(huán)體,顯式指明continue語(yǔ)句想要影響哪一個(gè)循環(huán)體也會(huì)非常有用.
//標(biāo)簽 statement label來(lái)標(biāo)記一個(gè)循環(huán)體或者條件語(yǔ)句,對(duì)于一個(gè)條件語(yǔ)句,你可以使用break加標(biāo)簽的方式,來(lái)結(jié)束這個(gè)被標(biāo)記的語(yǔ)句,對(duì)于一個(gè)循環(huán)語(yǔ)句,你可以使用break 或者continue加標(biāo)簽,來(lái)結(jié)束或者繼續(xù)這條被標(biāo)記語(yǔ)句的執(zhí)行
//聲明一個(gè)帶標(biāo)簽的語(yǔ)句是通過(guò)在該語(yǔ)句的關(guān)鍵詞的同一行前面防止一個(gè)標(biāo)簽,作為這個(gè)語(yǔ)句的前導(dǎo)關(guān)鍵字 introducor keyword 并且該標(biāo)簽后面跟隨一個(gè)冒號(hào)
// label name : while condition { statements}
//意思應(yīng)該為循環(huán)體內(nèi) 嵌套一個(gè)循環(huán)體或者一個(gè)switch 語(yǔ)句 在最外層的主循環(huán)體前加一個(gè)標(biāo)簽 與冒號(hào) 來(lái)代表這個(gè)最外層主要循環(huán)體,然后內(nèi)層的循環(huán)體匹配到一個(gè)條件正好滿足條件,然后要求整個(gè)循環(huán)體結(jié)束,不再執(zhí)行?;蛘咛^(guò)這個(gè) 繼續(xù)下次
let outnum = 11
let innum = 22
var countnum = 0
outfor: for i in 0..<4{
infor: for j in 0..<4{
countnum = i * 10 + j
inswitch: switch countnum {
case outnum:
print("匹配到了 11 執(zhí)行continue操作 跳過(guò)內(nèi)層for當(dāng)前循環(huán)")
continue infor
// fallthrough 想著 我只是結(jié)束內(nèi)層循環(huán) 但switch語(yǔ)句還是繼續(xù)走啊 能不能貫穿到默認(rèn)去
case innum :
print("匹配到了22 結(jié)束整個(gè)外層循環(huán)")
break outfor
default:
break
}
print("結(jié)束執(zhí)行switch \(countnum)")
// 打印得出 匹配到了11 后結(jié)束內(nèi)層循環(huán),switch 也停止了,內(nèi)層循環(huán)末尾的打印當(dāng)匹配到11后也沒(méi)有執(zhí)行,直接在匹配到了11 后就沒(méi)再往下走過(guò)。
//在匹配到了22后也沒(méi)有執(zhí)行內(nèi)層循環(huán)末尾的打印,直接結(jié)束了整個(gè)外層循環(huán)
}
print(countnum)
}
//提前退出 想if語(yǔ)句一樣,guard 的執(zhí)行取決于一個(gè)表達(dá)式的布爾值,我們可以使用guard 語(yǔ)句來(lái)要求條件必須為真時(shí),以執(zhí)行g(shù)uard 語(yǔ)句后的代碼,不同于if 語(yǔ)句,一個(gè)guard 語(yǔ)句總是有一個(gè)else 從句,如果條件不為真則執(zhí)行else 從句中的代碼。
//如果條件不被滿足,在else分支上的代碼就會(huì)被執(zhí)行,這個(gè)分支必須轉(zhuǎn)義控制以退出guard語(yǔ)句出現(xiàn)的代碼段。它可以用控制轉(zhuǎn)義語(yǔ)句如 return,break,continue,或者throw做這件事,或者調(diào)用一個(gè)不反悔的方法或函數(shù),例如fatalerror()
//相比于可以實(shí)現(xiàn)同樣功能的if語(yǔ)句,按需使用guard 語(yǔ)句會(huì)提升我們代碼的可讀性,它可以使你的代碼連貫的被執(zhí)行 而不需要將它抱在else塊中 。它可以使你在緊鄰條件判斷的地方,處理違規(guī)的情況。
//個(gè)人覺(jué)得可以用在 各種格式判斷上 如手機(jī)號(hào),郵箱,身份證等等正則表達(dá)式上,或者在一個(gè)表單頁(yè)面,很多填寫頁(yè)面做未填寫檢查
conname(person: ["name":"lili"])
conname(person:["name":"lili","where":"安徽"])
conname(person:["noname":"noname"])
//檢測(cè)API可用性
//swift 內(nèi)置支持檢查API可用性 ,這可以確保我們不會(huì)在當(dāng)前部署機(jī)器上,不小心使用了不可用的API
//編譯器使用SDK中的可用信息來(lái)驗(yàn)證我們的代碼中使用的所有API 在項(xiàng)目指定的步數(shù)目標(biāo)上是否可用,如果我們嘗試使用一個(gè)不可用的API,SWift會(huì)在編譯時(shí)報(bào)錯(cuò)
//我們?cè)趇f或guard 語(yǔ)句中使用可用性條件,(availablity condition) 去有條件的執(zhí)行一段代碼,來(lái)在運(yùn)行時(shí)判斷調(diào)用的API 是否可用。編譯器使用從可用性條件語(yǔ)句中獲取的信息去驗(yàn)證,在這個(gè)代碼塊中調(diào)用的API 是否可用
if #available(iOS 10, macOS 10.12, *){
print("支持ios 10 和macOS 10.12")
}else{
print("不支持")
}
//在一般形式中,可用性條件使用了一個(gè)平臺(tái)名字和版本的列表,平臺(tái)名字可以使iOS,macOS,watchOS 和tvOS
}
func conname(person :[String : String]){
guard let name = person["name"] else {
print("沒(méi)有名字的你 你好")
return;
}
guard let location = person["where"] else {
print("\(name)不知道你在哪")
return
}
print("\(name) \(location) 天氣怎么樣")
}
打印為
nihao
hellp
world
b : 2
a : 1
c : 3
a = Optional("1")
b = Optional("2")
c = Optional("3")
0
1
2
3
4
5
0
1
2
3
4
5
6
7
8
9
1 times 5 is 5
2 times 5 is 10
3 times 5 is 15
4 times 5 is 20
5 times 5 is 25
9
0
5
10
15
20
25
30
35
40
45
50
55
0
3
6
9
12
3
5
7
9
11
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
12
太簡(jiǎn)單了 就是小于32
空調(diào)極限
2||3
The last letter of the alphabet
The letter A
匹配 _,0
case first 2
case first
1,-1 where is x == -y
case second
匹配到了 default
case first
x =10 y = 10
hello worl
The integer value of 三 is 3.
number 5 isget thisget second
結(jié)束執(zhí)行switch 0
結(jié)束執(zhí)行switch 1
結(jié)束執(zhí)行switch 2
結(jié)束執(zhí)行switch 3
3
結(jié)束執(zhí)行switch 10
匹配到了 11 執(zhí)行continue操作 跳過(guò)內(nèi)層for當(dāng)前循環(huán)
結(jié)束執(zhí)行switch 12
結(jié)束執(zhí)行switch 13
13
結(jié)束執(zhí)行switch 20
結(jié)束執(zhí)行switch 21
匹配到了22 結(jié)束整個(gè)外層循環(huán)
lili不知道你在哪
lili 安徽 天氣怎么樣
沒(méi)有名字的你 你好
支持ios 10 和macOS 10.12