一個(gè)下午讓你掌握Swift基礎(chǔ) ( 5/9 ) 做判斷

簡(jiǎn)介

這是一個(gè)Swift語(yǔ)言教程军熏,基于最新的iOS 9度硝,Xcode 7.3和Swift 2.2凌简,會(huì)為你介紹Swift編程非成涎祝基礎(chǔ)的內(nèi)容。從電腦如何工作的全程基本原理到語(yǔ)言結(jié)構(gòu)雏搂,你會(huì)足夠了解這門語(yǔ)言藕施,來(lái)處理數(shù)據(jù)和管理代碼的行為。

快速鏈接


做判斷

寫一個(gè)電腦程序的時(shí)候凸郑,需要能夠用不同的劇本告訴電腦該干什么裳食。例如,一個(gè)計(jì)算器app在用戶按加號(hào)按鈕的時(shí)候要做一件事芙沥,按減號(hào)按鈕的時(shí)候做另一件事诲祸。
在電腦編程領(lǐng)域,這個(gè)概念被稱作控制流(control flow)而昨。它被這樣命名因?yàn)槌绦虻牧鞒蹋╢low)由多種方法控制烦绳。在這篇文章里,你會(huì)學(xué)習(xí)到在程序里如何做判斷配紫,以及通過使用語(yǔ)法來(lái)控制流程。

if語(yǔ)句

第一個(gè)也是最常用的控制程序流程的方式就是使用if語(yǔ)句(if statement)午阵,可以讓程序只在某個(gè)特定情況是true的時(shí)候做一些事躺孝。例如,看下面的代碼:

if 2 > 1 {
    print("是的底桂,2比1大植袍。")
}

這一個(gè)簡(jiǎn)單的if語(yǔ)句。如果括號(hào)里的情況是true籽懦,語(yǔ)句就會(huì)執(zhí)行花括號(hào)里的代碼于个。如果括號(hào)里的情況是false,語(yǔ)句不會(huì)執(zhí)行花括號(hào)里的代碼暮顺。就這么簡(jiǎn)單厅篓!

上面的代碼也為你介紹了新語(yǔ)法:print()函數(shù)秀存,簡(jiǎn)單地顯示一些東西到屏幕上。在你的playground里羽氮,你可以看見上面print()語(yǔ)句的結(jié)果或链,通過點(diǎn)擊 View\Debug Area\Show Debug Area

你會(huì)看見這樣的東西:

點(diǎn)擊上面截圖上高亮的兩個(gè)按鈕也可以顯示debug(排除錯(cuò)誤)區(qū)域档押。Xcode有很多方式來(lái)完成同樣的事情澳盐!

你可以擴(kuò)展一個(gè)if語(yǔ)句,提供在情況是false的時(shí)候運(yùn)行的代碼令宿。這被稱作else子句(clause)叼耙。這是一個(gè)例子:

let animal = "狐貍"

if animal == "貓" || animal == "狗" {
    print("這個(gè)動(dòng)物是居家寵物。")
} else {
    print("這個(gè)動(dòng)物不是居家寵物粒没。")
}

這里筛婉,如果(if)animal等于“貓”或“狗”,然后語(yǔ)句會(huì)運(yùn)行代碼的第一塊革娄。如果animal既不等于“貓”又不等于“狗”倾贰,語(yǔ)句會(huì)運(yùn)行if語(yǔ)句里else里的那部分代碼,在debug區(qū)域顯示如下內(nèi)容:

這個(gè)動(dòng)物不是居家寵物拦惋。

其實(shí)使用 if 語(yǔ)句還能做更多事情匆浙。有時(shí)候你想檢測(cè)一個(gè)情況,然后是另一個(gè)情況厕妖。這就是else-if語(yǔ)句參演的地方啦首尼。
你可以像這樣使用:

let hourOfDay = 12
let timeOfDay: String
if hourOfDay < 6 {
    timeOfDay = "清晨"
} else if hourOfDay < 12 {
    timeOfDay = "上午"
} else if hourOfDay < 17 {
    timeOfDay = "下午"
} else if hourOfDay < 20 {
    timeOfDay = "晚上"
} else if hourOfDay < 24 {
    timeOfDay = "夜深了"
} else {
    timeOfDay = "這他媽不是時(shí)間!"
}
print(timeOfDay)

一個(gè)接一個(gè)的else-if語(yǔ)句來(lái)測(cè)試多種情況言秸,直到發(fā)現(xiàn)一個(gè)true情況软能。它只會(huì)執(zhí)行和第一個(gè)true情況相關(guān)的代碼,無(wú)論隨后的else-if情況是不是true举畸。換句話說(shuō)查排,else-if情況的順序影響很大!

你可以在末尾加一個(gè)else抄沮,來(lái)處理所有都不是true的情況跋核。else是可選的,如果你不需要它那就不要叛买;在這個(gè)例子里你的確需要它砂代,來(lái)確保timeOfDay在你輸出它的時(shí)候有一個(gè)有效值。

這個(gè)例子里率挣,else-if語(yǔ)句帶有一個(gè)數(shù)字刻伊,表示一天中的時(shí)間,然后把它轉(zhuǎn)換到一個(gè)字符串,表示這個(gè)小時(shí)屬于一天中的哪個(gè)部分捶箱。采用24小時(shí)時(shí)間制智什,語(yǔ)句被按順序一個(gè)一個(gè)檢查:

  • 第一次檢查看看小時(shí)是不是小于6。如果是讼呢,意味著在清晨撩鹿。
  • 如果小時(shí)不小于6,語(yǔ)句繼續(xù)執(zhí)行第一個(gè)else-if悦屏,檢查小時(shí)是不是小于12节沦。
  • 然后按順序,在情況是false的時(shí)候础爬,語(yǔ)句檢查小時(shí)是不是小于17甫贯,然后是小于20,然后是小于24看蚜。
  • 最后叫搁,如果小時(shí)數(shù)超出范圍了,語(yǔ)句察覺到了一個(gè)無(wú)效情況供炎,然后把這個(gè)信息打印到了控制臺(tái)渴逻。

在上面的代碼里,hourOfDay常量是12音诫。因此惨奕,代碼會(huì)在屏幕上像下面這樣顯示:

下午

注意即使hourOfDay < 20和hourOfDay < 24情況也都是true,但語(yǔ)句只執(zhí)行了輸入滿足的第一個(gè)else-if竭钝,當(dāng)然就是hourOfDay < 17情況啦梨撞。

包含變量

If 語(yǔ)句介紹了一個(gè)新概念,那就是scope(范圍)香罐,通過使用花括號(hào)來(lái)包含變量的一種方式卧波。

讓我們看一個(gè)例子。想象一下你要計(jì)算向顧客收取的費(fèi)用庇茫。

這是你打好的算盤:

你每小時(shí)賺25塊港粱,最多40小時(shí),此后的每小時(shí)都要50塊旦签。

使用Swift啥容,你可以這樣計(jì)算你的費(fèi)用:

var hoursWorked = 45

var price = 0
if hoursWorked > 40 {
  let hoursOver40 = hoursWorked - 40
  price += hoursOver40 * 50
  hoursWorked -= hoursOver40
}
price += hoursWorked * 25

print(price)

這段代碼檢查小時(shí)數(shù)是不是超過40了。如果是顷霹,代碼計(jì)算超過40的小時(shí)數(shù),然后用它乘上50塊击吱,然后把結(jié)果加到價(jià)格上淋淀。代碼然后從工作的總時(shí)間里減去超過40小時(shí)的部分。把剩下的工作小時(shí)乘以25塊,然后加到總價(jià)上朵纷。

在上面的例子里炭臭,結(jié)果是這樣的:
1250

有意思的是 if 語(yǔ)句里面的代碼。有一個(gè)新常量的聲明袍辞,hoursOver40鞋仍,來(lái)保存超過40小時(shí)的數(shù)字。
很明顯你可以在if語(yǔ)句里面使用它搅吁。但如果你嘗試在上面代碼的結(jié)尾去使用它威创,會(huì)發(fā)生什么?

···
print(price)
print(hoursOver40)

這會(huì)導(dǎo)致下面的錯(cuò)誤:

`error: use of unresolved identifier 'hoursOver40'(錯(cuò)誤:使用了不確定的標(biāo)識(shí)符‘hoursOver40’)`

這個(gè)錯(cuò)誤告訴你谎懦,你只被允許在創(chuàng)建 hoursOver40 常量的 scope 里使用它肚豺。這個(gè)例子里,if 語(yǔ)句引入了一個(gè)新 scope界拦,所以當(dāng)這個(gè) scope 結(jié)束了吸申,你就不能再使用這個(gè)常量了。

但是享甸,每個(gè) scope 可以使用來(lái)自它的父 scope 的變量和常量截碴。在上面的例子里,if 語(yǔ)句里面的scope使用了 price 和 hoursWorked 變量蛉威,他們就是在父 scope 被創(chuàng)建的日丹。

三目操作符(The ternary conditional operator)

現(xiàn)在我想介紹一個(gè)新的操作符,你在第三篇文章里沒有看到的瓷翻。叫做三目操作符(The ternary conditional operator)聚凹,它是和 if 語(yǔ)句相關(guān)的。

如果你想判斷兩個(gè)變量最小的值和最小的值齐帚,你可以像這樣使用if語(yǔ)句:

let a = 5
let b = 10

let min: Int
if a < b {
    min = a
} else {
    min = b 
}

let max: Int
if a > b {
    max = a 
} else {
    max = b 
}

現(xiàn)在你知道這是怎么工作的了妒牙,但這有好多代碼。如果你能把它縮短到就幾行豈不是很好对妄?唔湘今,你可以的,感謝三目操作符剪菱!

三目操作符帶有一個(gè)情況摩瞎,返回兩個(gè)值其中之一,取決于那個(gè)情況是true還是false孝常。語(yǔ)法如下所示:

 (<情況>) ? <TRUE值> : <FALSE值>

你可以使用這個(gè)操作符來(lái)重寫上面的長(zhǎng)代碼塊旗们,像這樣:

let a = 5
let b = 10

let min = a < b ?  a : b
let max = a > b ? a : b

第一個(gè)例子里,情況是a<b构灸。如果是true上渴,賦值回min的結(jié)果會(huì)是a;如果是false,結(jié)果會(huì)是b的值稠氮。

我相信你也同意這樣簡(jiǎn)單多了曹阔!這是一個(gè)有用的操作符,你會(huì)發(fā)現(xiàn)自己經(jīng)常使用它隔披。

**注意:**因?yàn)檎覂蓚€(gè)數(shù)字中更大的或更小的那個(gè)是如此常用的操作赃份,Swift標(biāo)準(zhǔn)庫(kù)為這個(gè)目標(biāo)提供了兩個(gè)函數(shù):max和min。

迷你練習(xí)

創(chuàng)建一個(gè)叫做myAge的常量奢米,初始化為你的年齡抓韩。寫一個(gè)if語(yǔ)句,如果你的年齡在13到19之間恃慧,就print“青少年”园蝠,如果不是,就print“不是青少年”痢士。

Swift語(yǔ)句

控制流程的另一種方式是使用 switch 語(yǔ)句彪薛,允許你根據(jù)變量或常量的值來(lái)執(zhí)行不同的代碼。

這是一個(gè)非常簡(jiǎn)單的基于整數(shù)的 switch 語(yǔ)句:

let number = 10
switch (number) {
case 0:
    print("零")
default:
    print("非零")
}

這個(gè)例子怠蹂,代碼會(huì)如下輸出:

非零

這個(gè)switch語(yǔ)句的作用是判斷數(shù)字是不是零周荐。但它可以做更復(fù)雜一點(diǎn)的事喂窟!

要處理一個(gè)特殊情況,使用 case 后面跟著你想判斷的值,這個(gè)例子里是0吹散。然后其爵,用default來(lái)表明强胰,如果是所有其它值應(yīng)該做點(diǎn)什么迅箩。

這是另一個(gè)例子:

let number = 10
switch (number) {
case 10:
    print("這是10!")
default:
    break
}

這次你判斷10屋摇,在case里print了一條消息揩魂。如果是其他值,那什么都不應(yīng)該發(fā)生炮温。當(dāng)你不想讓一個(gè)case或default發(fā)生任何事情的時(shí)候火脉,那就用break關(guān)鍵字。這告訴Swift你不打算在這里寫任何代碼柒啤,任何事都不應(yīng)該發(fā)生倦挂。

當(dāng)然,switch語(yǔ)句也可以處理整數(shù)以外的數(shù)據(jù)類型担巩。他們可以處理任何數(shù)據(jù)類型方援!這是一個(gè)基于string的例子:

let string = "狗"
switch (string) {
case "貓", "狗":
    print("這個(gè)動(dòng)物是居家型。")
default:
    print("這個(gè)動(dòng)物不是居家型涛癌。")
}

這會(huì)print如下內(nèi)容:

這個(gè)動(dòng)物是居家型肯骇。

這個(gè)例子里窥浪,你為case提供了兩個(gè)值,意味著如果值等于“貓”或“狗”笛丙,語(yǔ)句就會(huì)執(zhí)行這個(gè)case。

你也可以給switch語(yǔ)句不止一個(gè)case假颇。你在這篇文章之前的部分看見了一個(gè) if 語(yǔ)句帶有 else-if 從句胚鸯,可以把一天中的小時(shí)轉(zhuǎn)換為描述這是一天中的哪個(gè)部分的字符串。你可以用一個(gè)switch語(yǔ)句來(lái)更簡(jiǎn)要的重寫它笨鸡,像這樣:

let hourOfDay = 12
let timeOfDay: String
switch (hourOfDay) {
case 0, 1, 2, 3, 4, 5:
    timeOfDay = "清晨"
case 6, 7, 8, 9, 10, 11:
    timeOfDay = "上午"
case 12, 13, 14, 15, 16:
    timeOfDay = "下午"
case 17, 18, 19:
    timeOfDay = "晚上"
case 20, 21, 22, 23:
    timeOfDay = "夜深了"
default:
    timeOfDay = "這他媽不是時(shí)間姜钳!"
}
print(timeOfDay)

代碼會(huì) print 如下內(nèi)容:

下午

如果有多個(gè)case,語(yǔ)句會(huì)執(zhí)行第一個(gè)滿足的case形耗。你應(yīng)該會(huì)同意這個(gè)例子比用if語(yǔ)句來(lái)的更簡(jiǎn)要和清晰吧哥桥。細(xì)節(jié)上其實(shí)也更嚴(yán)謹(jǐn),因?yàn)?if 語(yǔ)句沒法處理負(fù)數(shù)的情況激涤,但這兒負(fù)數(shù)被正確地認(rèn)為是無(wú)效的拟糕。

基于一個(gè)值的property來(lái)匹配一個(gè)case的情況也是可以的。就像你在第三篇學(xué)的倦踢,你可以使用模除操作符來(lái)判斷一個(gè)整數(shù)是偶數(shù)還是奇數(shù)送滞。看看這段代碼:

let number = 10
switch (number) {
case let x where x % 2 == 0:
    print("偶數(shù)")
default:
    print("奇數(shù)")
}

這會(huì)print如下內(nèi)容:

偶數(shù)

這個(gè)switch語(yǔ)句使用了let-where語(yǔ)法辱挥,意味著case只會(huì)在一個(gè)特定情況是true的時(shí)候匹配犁嗅。這個(gè)例子里,你設(shè)計(jì)了case來(lái)滿足如果值是偶數(shù)的情況——那就是值模除2等于0啦晤碘。

這個(gè)可以基于情況來(lái)匹配值的方法叫做模式匹配(pattern matching)褂微。

另一種方式使用switch語(yǔ)句也有絕佳效果,像這樣:

let coordinates: (x: Int, y: Int, z: Int) = (3, 2, 5)
switch (coordinates) {
case (0, 0, 0): // 1
    print("原點(diǎn)")
case (_, 0, 0): // 2
    print("在x軸上园爷。")
case (0, _, 0): // 3
    print("在y軸上宠蚂。")
case (0, 0, _): // 4
    print("在z軸上。")
default:        // 5
    print("空間里的某個(gè)位置")
}

這個(gè)switch語(yǔ)句利用了部分匹配(partial matching)腮介。按順序說(shuō)一下每個(gè)case都做了什么:

  1. 恰好匹配值是(0, 0, 0)的情況肥矢。這是3D空間的原點(diǎn)。
  2. 匹配y=0, z=0以及任意的x值叠洗。這意味著坐標(biāo)點(diǎn)在x軸上甘改。
  3. 匹配x=0, z=0以及任意的y值。這意味著坐標(biāo)點(diǎn)在y軸上灭抑。
  4. 匹配x=0, y=0以及任意的z值十艾。這意味著坐標(biāo)點(diǎn)在z軸上。
  5. 匹配剩下的坐標(biāo)腾节。

用下劃線來(lái)表示你不在乎這個(gè)值忘嫉。你早在第二篇文章就見過了荤牍,會(huì)并會(huì)在貫穿教程的多個(gè)地方看見它。因?yàn)檫@太好用了庆冕!

如果你不想忽略值康吵,那你就能在switch語(yǔ)句里使用它,像這樣:

let coordinates: (x: Int, y: Int, z: Int) = (3, 2, 5)
switch (coordinates) {
case (0, 0, 0):
    print("原點(diǎn)")
case (let x, 0, 0):
    print("在x軸上 x = \(x)")
case (0, let y, 0):
    print("在y軸上 y = \(y)")
case (0, 0, let z):
    print("在z軸上 z = \(z)")
case (let x, let y, let z):
    print("空間里的某個(gè)位置 x = \(x), y = \(y), z = \(z)")
}

這里坐標(biāo)軸 case 使用 let 語(yǔ)法來(lái)把有關(guān)值取出访递。代碼然后使用字符串插入來(lái)構(gòu)建一個(gè)字符串晦嵌,把它 print 出來(lái)。

注意為什么這個(gè)switch語(yǔ)句不需要一個(gè)default拷姿。這是因?yàn)樽詈蟮腸ase本質(zhì)上就是default—它匹配任何值惭载,因?yàn)閷?duì)元組的任一部分都沒有限制。如果switch語(yǔ)句在cases里用光了所有可能的值响巢,那就不需要什么default了描滔。

最后,你也可以用與之前看到的同樣的let-where語(yǔ)法來(lái)匹配更復(fù)雜的情況踪古。例如:

let coordinates: (x: Int, y: Int, z: Int) = (3, 2, 5)
switch (coordinates) {
case (let x, let y, _) where y == x:
    print("在y = x線上含长。")
case (let x, let y, _) where y == x * x:
    print("在y = x^2線上。")
default:
    break
}

這里灾炭,你匹配了“y等于x”和“y等于x的平方”兩條線茎芋。

這些就是switch語(yǔ)句的基礎(chǔ)啦!

迷你練習(xí)

  1. 寫一個(gè)switch語(yǔ)句蜈出,基于一個(gè)整數(shù)的年齡田弥,然后print出這個(gè)年齡對(duì)應(yīng)的年齡層。你可以自己做一個(gè)年齡層铡原,或者用我的分類方法:0-2歲:幼兒偷厦,3-12歲:兒童,13-19歲:青少年燕刻,20-39歲:成年人只泼,40-60:中年人;61+:老人卵洗。
  2. 寫一個(gè)switch語(yǔ)句请唱,基于包含了一個(gè)字符串和一個(gè)整數(shù)的元組。字符串是一個(gè)名字过蹂,整數(shù)是一個(gè)年齡十绑。用和你在前一個(gè)練習(xí)同樣的情況,用 let 語(yǔ)法來(lái) print 出名字接著年齡層酷勺。例如本橙,我自己就應(yīng)該 print 出“張嘉夫是一個(gè)成年人〈嗨撸”

關(guān)鍵點(diǎn)

  • 用 if 語(yǔ)句做基于一個(gè)情況的簡(jiǎn)單判斷甚亭。
  • 在 if 語(yǔ)句里用 else 和 else-if 來(lái)為做判斷擴(kuò)展贷币,不止一個(gè)單獨(dú)的情況。
  • 你可以在簡(jiǎn)單 if 語(yǔ)句的地方用三目操作符亏狰。
  • 變量和常量屬于一個(gè)特定的scope(范圍)役纹,越過了scope就不能再用他們了。一個(gè)scope可以繼承父scope的變量和常量暇唾。
  • 用 switch 語(yǔ)句來(lái)基于一個(gè)變量或常量的值決定運(yùn)行哪段代碼字管。
  • switch 語(yǔ)句的強(qiáng)大來(lái)自于它使用模式匹配的能力,因?yàn)橹悼梢杂脧?fù)雜規(guī)則來(lái)進(jìn)行比較信不。

接下來(lái)去哪兒?

Apps很少全程時(shí)刻都運(yùn)行在同樣的方式亡呵;根據(jù)來(lái)自網(wǎng)絡(luò)或用戶輸入的內(nèi)容抽活,你的代碼需要做判斷去哪條路。有了if锰什,else和switch語(yǔ)句下硕,你可以讓代碼基于一些情況來(lái)做決定。

和決定是否要做一些事相似汁胆,你也能決定做一些事多少次梭姓。在下一篇文章里,你會(huì)看到如何使用循環(huán)來(lái)多次重復(fù)步驟嫩码。

挑戰(zhàn)

挑戰(zhàn)A:你就是編譯器

下面的代碼哪里錯(cuò)了誉尖?

let firstName = "嘉夫"
if firstName == "嘉夫" {
    let lastName = "張"
} else if firstName == "陽(yáng)" {
    let lastName = "劉"
}
let fullName = lastName + firstName

挑戰(zhàn)B:結(jié)果預(yù)測(cè)

看看下面的switch語(yǔ)句:

switch (coordinates) {
case (let x, let y, let z) where x == y && y == z:
    print("x = y = z")
case (_, _, 0):
    print("在x/y平面上")
case (_, 0, _):
    print("在x/z片面上")
case (0, _, _):
    print("在y/z平面上")
default:
    print("沒什么特別的")
}

在coordinates分別是下列每一個(gè)的時(shí)候,代碼會(huì) print 什么铸题?

let coordinates = (1, 5, 0)
let coordinates = (2, 2, 2)
let coordinates = (3, 0, 1)
let coordinates = (3, 2, 5)
let coordinates = (0, 2, 4)

介紹

歡迎來(lái)到Swift世界铡恕!Swift是一門蘋果在2014年夏天發(fā)布的編程語(yǔ)言。從那之后丢间,Swift發(fā)布了一個(gè)主要的版本跳躍探熔,成為了開始在蘋果平臺(tái):iOS,OS X烘挫,watchOS和tvOS開發(fā)的最簡(jiǎn)單的方式诀艰。

誰(shuí)適合這篇教程

這篇教程適合懂一點(diǎn)編程、并且希望學(xué)習(xí)Swift的人饮六。也許你已經(jīng)為網(wǎng)站寫過一些JavaScript代碼其垄,或者用Python寫過一些簡(jiǎn)短的程序。這篇教程就是為你準(zhǔn)備的喜滨!你會(huì)學(xué)習(xí)到編程的基本概念捉捅,同時(shí)也會(huì)成為Swift語(yǔ)言小能手。

如果你是赤裸裸的編程新手虽风,這篇教程也是為你準(zhǔn)備的棒口!教程里貫穿有簡(jiǎn)短的鍛煉和挑戰(zhàn)來(lái)給你一些編程練習(xí)寄月,同時(shí)測(cè)試你的知識(shí)。

需要準(zhǔn)備什么

要看這篇教程无牵,你需要準(zhǔn)備如下的東西:

  • 一臺(tái)運(yùn)行OS X El Captian(10.11)的Mac漾肮,帶有最新發(fā)布的更新并且安裝了安全補(bǔ)丁。這樣你才能夠安裝需要的開發(fā)工具:最新版本的Xcode茎毁。
  • Xcode 7.3 或更新的版本克懊。Xcode是用Swift寫代碼的主要開發(fā)工具。最小也需要Xcode 7.3版本七蜘,因?yàn)槟莻€(gè)版本包含Swift 2.2谭溉。你可以免費(fèi)從Mac App Store下載Xcode的最新版本,這里:http://apple.co/1FLn51R橡卤。

如果你還沒有安裝Xcode最新版本扮念,在繼續(xù)看下面的教程前要確定安裝。

如何使用這篇教程

每篇教程都會(huì)介紹觸手可及的話題理論碧库,伴隨大量Swift代碼來(lái)示范在學(xué)習(xí)的實(shí)際的應(yīng)用程序柜与。

教程里的所有代碼都是平臺(tái)中立的;這意味著不是為iOS嵌灰、OS X或任何其它平臺(tái)而特定弄匕。代碼在playgrounds里運(yùn)行,你在本篇中已經(jīng)學(xué)習(xí)了沽瞭。

在剩下的教程里迁匠,你可以把代碼在自己的playground里輸入進(jìn)去。這樣你就可以和代碼“玩孙跖В”(play around)柒瓣,做一些改變立即就能看見代碼運(yùn)行的結(jié)果。

剩下的教程里會(huì)貫穿實(shí)際小練習(xí)吠架,都是簡(jiǎn)短的練習(xí)芙贫,關(guān)于觸手可及的主題。每篇的末尾也有挑戰(zhàn)傍药,會(huì)有編程問題也會(huì)有長(zhǎng)一點(diǎn)的代碼練習(xí)來(lái)測(cè)試你的知識(shí)磺平。做完就能掌握大部分的Swift基礎(chǔ)知識(shí)。

教程更新

教程會(huì)隨Swift語(yǔ)言的更新而更新拐辽,會(huì)發(fā)布在我的簡(jiǎn)書和知乎專欄上拣挪,搜索“張嘉夫”即可關(guān)注我。

目錄

本教程從一些基礎(chǔ)工作開始來(lái)讓你起步:

  • 第1篇俱诸,編程本質(zhì) & Playground基礎(chǔ) - 這就是菠劝,到編程世界的入門介紹!你會(huì)從電腦和編程的預(yù)覽開始睁搭,然后剩余時(shí)間給Swift playground打個(gè)招呼赶诊。
  • 第2篇笼平,變量 & 常量 - 你會(huì)學(xué)習(xí)到變量和常量,這是用來(lái)存儲(chǔ)數(shù)據(jù)的“地方”舔痪。你也會(huì)學(xué)習(xí)數(shù)據(jù)類型以及Swift如何追蹤數(shù)據(jù)類型并在代碼中進(jìn)行傳輸寓调。
  • 第3篇,數(shù)字類型 & 操作 - 你會(huì)從基礎(chǔ)的數(shù)字類型比如整形和浮點(diǎn)型數(shù)字開始锄码,當(dāng)然也包括布爾類型夺英。也會(huì)看到一些在實(shí)際操作,從比較到算數(shù)操作如加減滋捶。
  • 第4篇痛悯,字符串 - 用字符串來(lái)存儲(chǔ)文字-從按鈕里的文字到圖片的標(biāo)注到這篇教程全部的文字,存儲(chǔ)這所有的一切重窟!你會(huì)學(xué)習(xí)到string和character類型灸蟆,以及基于這些類型的一些常見操作。

在腦海中有基礎(chǔ)數(shù)據(jù)類型后亲族,就該用那些數(shù)據(jù)做一些事情了:

  • 第5篇,做判斷 - 代碼不總是直接從頭運(yùn)行到尾可缚。你會(huì)學(xué)習(xí)在代碼里如何做判決并且設(shè)定情況來(lái)運(yùn)行某段代碼霎迫。
  • 第6篇,重復(fù)步驟 - 繼續(xù)不要讓代碼直線運(yùn)行的主題帘靡,你會(huì)學(xué)習(xí)到如何使用循環(huán)來(lái)重復(fù)某些步驟知给。
  • 第7篇,函數(shù) - 函數(shù)是Swift中用來(lái)構(gòu)建代碼的基礎(chǔ)建筑描姚。你會(huì)學(xué)習(xí)到如何定義函數(shù)來(lái)分組代碼到可復(fù)用單元中涩赢。
  • 第8篇,閉包(Closures) - 閉包和函數(shù)很接近轩勘。你會(huì)學(xué)習(xí)到如何使用它們來(lái)輕松傳遞代碼塊筒扒。

最后一篇會(huì)回到數(shù)據(jù):

  • 第9節(jié),可選值 - 這篇講可選值绊寻,Swift中的一種特殊類型花墩,表示既有可能是一個(gè)真實(shí)的值也有可能沒有值。這篇的最后你會(huì)知道為什么要用可選值以及如何安全地使用它們澄步。

這些基礎(chǔ)會(huì)讓你快速開始Swift之路冰蘑,做好接觸更高級(jí)編程主題的準(zhǔn)備。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末村缸,一起剝皮案震驚了整個(gè)濱河市祠肥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梯皿,老刑警劉巖仇箱,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件县恕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡工碾,警方通過查閱死者的電腦和手機(jī)弱睦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)渊额,“玉大人况木,你說(shuō)我怎么就攤上這事⊙#” “怎么了火惊?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)奔垦。 經(jīng)常有香客問我屹耐,道長(zhǎng),這世上最難降的妖魔是什么椿猎? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任惶岭,我火速辦了婚禮,結(jié)果婚禮上犯眠,老公的妹妹穿的比我還像新娘按灶。我一直安慰自己,他們只是感情好筐咧,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布鸯旁。 她就那樣靜靜地躺著,像睡著了一般量蕊。 火紅的嫁衣襯著肌膚如雪铺罢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天残炮,我揣著相機(jī)與錄音韭赘,去河邊找鬼。 笑死势就,一個(gè)胖子當(dāng)著我的面吹牛辞居,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蛋勺,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼瓦灶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了抱完?” 一聲冷哼從身側(cè)響起贼陶,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后碉怔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烘贴,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年撮胧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了桨踪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芹啥,死狀恐怖锻离,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情墓怀,我是刑警寧澤汽纠,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站傀履,受9級(jí)特大地震影響虱朵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钓账,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一碴犬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梆暮,春花似錦翅敌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)治专。三九已至卖陵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間张峰,已是汗流浹背泪蔫。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喘批,地道東北人撩荣。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像饶深,于是被迫代替她去往敵國(guó)和親餐曹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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