簡(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è)下午讓你掌握Swift基礎(chǔ) ( 1/9 ) 編程本質(zhì) & Playground基礎(chǔ)
- 一個(gè)下午讓你掌握Swift基礎(chǔ) ( 2/9 ) 變量 & 常量
- 一個(gè)下午讓你掌握Swift基礎(chǔ) ( 3/9 ) 數(shù)字類型 & 操作
- 一個(gè)下午讓你掌握Swift基礎(chǔ) ( 4/9 ) 字符串
- 一個(gè)下午讓你掌握Swift基礎(chǔ) ( 5/9 ) 做判斷
- 一個(gè)下午讓你掌握Swift基礎(chǔ) ( 6/9 ) 重復(fù)步驟
- 一個(gè)下午讓你掌握Swift基礎(chǔ) ( 7/9 ) 函數(shù)
- 一個(gè)下午讓你掌握Swift基礎(chǔ) ( 8/9 ) 閉包
- 一個(gè)下午讓你掌握Swift基礎(chǔ) ( 9/9 ) 可選值
- Swift 初學(xué)者 ( 10/12 ) 數(shù)組
- Swift 初學(xué)者 ( 11/12 ) 字典
- Swift 初學(xué)者 ( 12/12 ) 集合
做判斷
寫一個(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都做了什么:
- 恰好匹配值是(0, 0, 0)的情況肥矢。這是3D空間的原點(diǎn)。
- 匹配y=0, z=0以及任意的x值叠洗。這意味著坐標(biāo)點(diǎn)在x軸上甘改。
- 匹配x=0, z=0以及任意的y值。這意味著坐標(biāo)點(diǎn)在y軸上灭抑。
- 匹配x=0, y=0以及任意的z值十艾。這意味著坐標(biāo)點(diǎn)在z軸上。
- 匹配剩下的坐標(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í)
- 寫一個(gè)switch語(yǔ)句蜈出,基于一個(gè)整數(shù)的年齡田弥,然后print出這個(gè)年齡對(duì)應(yīng)的年齡層。你可以自己做一個(gè)年齡層铡原,或者用我的分類方法:0-2歲:幼兒偷厦,3-12歲:兒童,13-19歲:青少年燕刻,20-39歲:成年人只泼,40-60:中年人;61+:老人卵洗。
- 寫一個(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)備。