你的程式開發初體驗	
  (Swift)	
  
講師:彼得潘	
  
[08/15]
彼得潘簡介
App程式設計⼊入⾨門:iPhone.iPad
Swift程式設計⼊入⾨門
正職: 作家
副業: 專欄作家,⼯工程師,講師,顧問,家教,創業家
20幾款APP
相關教學資源
http://www.facebook.com/iphone.peterpan
http://deeploveapple.blogspot.tw
apppeterpan@gmail.com
https://github.com/AppPeterPan/It-s-all-about-
App/wiki/It's-all-about-App
FB粉絲團
blog
iOS學習資源wiki
http://deeploveiossdk.tumblr.com英⽂文wiki
email
medium
https://medium.com/@apppeterpan
http://swiftbook.strikingly.com
程式語⾔言是什麼?
⼈人類和電腦溝通的語⾔言
利⽤用程式語⾔言,命令電腦做事
切記: 電腦智⼒力100,運動0分,

它可以計算和林志玲表⽩白成功的機率,
卻無法幫我們跑腿買便當
其實
電腦只懂 0 & 1
程式語⾔言最後會被轉換為0 & 1
⼆二進位
程式執⾏行
CPU讀取記憶體中的程式碼執⾏行
程式執⾏行時,資料暫存於記憶體
永久保存的資料需寫⼊入檔案
為什麼學Swift
https://blog.alphacamp.co/2015/07/27/for-swift-beginners/
開發前的準備
硬體上的準備
• Mac
• PC上裝破解的Mac作業系統 (不建議)
Macbook Air
Mac Mini
記憶體愈多愈好
CPU影響程式編譯速度
$:⼀一萬多
Xcode
App StoreFree
Apple ID登⼊入
https://itunes.apple.com/app/xcode/id497799835
Xcode
https://developer.apple.com/xcode/downloads/
搶先下載尚未公開的最新beta版
可直接下載,無需登⼊入
Xcode playground
Swift練功的秘密花園
建⽴立playground
⽅方法⼀一
⽅方法⼆二
設定名稱和平台
playground主畫⾯面
程式碼編輯區塊 結果即時顯⽰示區塊
整數和浮點數
⼼心算⼗十段的數學神童
數學神算
加減乘除 整數和浮點數 負數
結果⾏行⾏行對應
練習
1的平⽅方加2的平⽅方,⼀一路加到9的平⽅方
字串
中英⽇日樣樣通的語⾔言奇才
語⾔言天才
字串相加以" " 包含字串內容
Emoji & Symbols
錯誤字串
發現錯誤: 紅⾊色驚嘆號
遇錯即停下腳步的膽⼩小
playground
不會執⾏行
由上⽽而下執⾏行,遇錯即中斷
變數
說變就變的記憶⼤大師
宣告變數儲存資料
可變
關鍵字: var
age佔據某個記憶體空間
記憶體位址落落⻑⾧長,沒⼈人記得起來,
所以我們需要好記的變數名稱
⼤大⼩小寫有差
變數名不能重覆
儲存不同的型別資料
專⼀一
⼀一⽣生只愛某⼀一型
沒結果就是事情⼤大條了 !
age只能儲存Int
更安全
報錯的Console Output
像柯南⼀一樣聰明
⾃自動推理型別
明明⽩白⽩白我的型別
內建型別: Int,String,Double
還有許許多多不同的型別,可儲存不同資料
甚⾄至還可以⾃自⼰己發明新的型別
練習
宣告3個變數,分別儲存⾃自⼰己⾼高中聯考的數學,英⽂文,國⽂文分數
分數相加除以3求平均
字串置換⼤大法
(變數名 )
http://margaret1122.pixnet.net/blog/post/39111405-【台北好咖啡】台灣最貴的咖啡茶館?
國⽗父紀
練習
我的名字是xxx,年齡xxx,⾝身⾼高xxx,...
宣告變數
以字串置換⾃自我介紹:
如果你是我的傳說
真的還是假的 (if else)
擇偶條件
⽐比較運算⼦子
<
<=
>
>=
==
!=
else
else if
多個條件,多層if
擇偶條件怎麼可能只有⼀一個
&&: 全部滿⾜足,缺⼀一不可
||: 知⾜足,只要⼀一個滿⾜足就好
判斷順序: 由左⽽而右
改變順序
⽐比較字串是否⼀一樣
變數⽣生存的區間
message只存在 { } 裡
練習
以if else描述⾃自⼰己的擇偶條件
需⽤用到else,多層if,&&, ||
認真研讀penny的擇偶條件歌詞,以程式表達
http://mojim.com/twy105574x1x1.htm
迴圈
反覆練習的好學⽣生
1+2+3,⼀一路加到
1000
加到1000 ? 全部打完可以下課了 !
不能說的秘密: 愈厲害的⼯工程師,其實愈懶惰
for迴圈
⼀一千次
初始條件 繼續執⾏行的條件
每⼀一次的變化
for迴圈
i = 1, i<= 1000
i = 2, i<= 1000
i = 1000, i<= 1000 sum = sum + 1000
sum = sum + 1
sum = sum + 2
i = 1001, i<= 1000 不成⽴立
顯⽰示結果的⼤大眼睛
折線圖
移動折線圖上顯⽰示結果的點
顯⽰示結果的⼤大眼睛
最終結果
歷史記錄
漂亮的內嵌顯⽰示
不同的變化條件
無間道的無間地獄
無窮迴圈
佛曰:「受身無間者永遠不死,壽長乃無間地獄中之⼤大劫。︒」
無窮迴圈
永遠不回頭,永遠不結束
App閃退
while迴圈
while後設定繼續執⾏行的條件
練習
1. 計算1的平⽅方加2的平⽅方,⼀一路加到100的平⽅方,分別以for &
while實作
2. 計算2的平⽅方加4的平⽅方,⼀一路加到100的平⽅方,分別以for &
while實作 (偶數的平⽅方)
函數
重覆利⽤用的懶⼈人法寶
沒有function的苦⽇日⼦子
定義和呼叫function
func 名稱 ( ) { 程式碼區塊 }+ + +
function裡的變數,只存在 { }裡
定義
呼叫 function名稱 + ( )
定義不完的function
接受參數的function
參數名
: 型別+ +
更彈性
接受多個參數的function
回傳資料的function
Swift Standard Library Function
內建function
練習
定義function,接受3個參數,起始值,最⼤大值和每次累加值,
回傳運算結果
例⼦子: 起始值 10, 最⼤大值 20,每次累加值3
10 + 13 + 16 + 19 = 58
類別和物件
沒有物件的凌亂世界
許許多多的變數記錄寶寶們的資訊
類別和物件
不⽤用懷胎⼗十⽉月,也能⽣生出寶寶物件
類別: class
物件的誕⽣生
定義屬性
愈多屬性,佔據愈多記憶體
讀取物件屬性
變數名 屬性名
.+ +
修改物件屬性
變數名 屬性名
.+ + = 新值+ +
練習
⽣生了n個寶寶 (可以是真的,也可以是幻想的)
設定每個寶寶的名字,星座,體重,⾝身⾼高,年齡
定義寶寶類別,包含名字,星座,體重,⾝身⾼高,年齡等屬性
定義物件能⼒力的⽅方法
(method)
其實是function,只是住在類別 { } 裡
呼叫⽅方法
呼叫⽅方法時需包含參數名稱 (第⼀一個參數例外)
Swift 2.0時,function也採取⼀一樣的規則
物件變
數名 (
.+ + )⽅方法名 參數+ + +
需透過物件呼叫
為何要包含參數名 ->
增加可讀性
700克 ? 700元?
如何判斷是呼叫⽅方法或
存取屬性
有( ): 呼叫⽅方法
無( ): 存取屬性
⽅方法裡可存取物件⾃自⼰己
的屬性
self: 物件⾃自⼰己
指到物件的屬性
彼得潘養的可愛兔⼦子⽩白彼得
• 看到的按鈕,圖⽚片都是物件
• 物件的播放⾳音樂method,

使得App可以播放⾳音樂
• 歌名是⿊黑⾊色,是因為物件的

⽂文字顏⾊色屬性設為⿊黑⾊色
• iOS SDK定義各式各樣不同功

能的類別,⽐比⽅方顯⽰示地圖,

播放⾳音樂,顯⽰示網⾴頁

App裡的物件
練習
在前⾯面練習定義的寶寶類別裡定義function
建⽴立寶寶物件並呼叫其function
陣列和字典
收藏眾多資料的置物箱
沒有array,變數超多的
悲慘世界
100個⼥女朋友名字變數
100個學⽣生分數變數
找出班上第⼀一名
課堂練習
領取號碼牌,乖乖排隊的
array
[ 開始, ] 結尾, , 分隔, 容納無限多的成員
以號碼存取成員,號碼從0開始
不存在的號碼
當掉 !Array index out of range
修改array成員
⼼心太軟,為了⼈人⼈人及格,調⾼高學⽣生分數
新增array成員
補考,新增學⽣生分數
append:
insert:
加到尾巴
加到某個特定位置
array是struct
struct類似類別,也有屬性和⽅方法
移除array成員
退學
array成員個數
array和for的結合
找出班上第⼀一名
練習
array和for的結合
找出班上第⼀一名
找出最後⼀一名
array和for in的結合
找出班上第⼀一名
練習
定義學⽣生類別,包含名字和分數2個屬性
建⽴立包含5個學⽣生物件的array
建⽴立包含5個學⽣生物件的array
1. 利⽤用for in,算出平均分數和找出分數最⾼高學⽣生的名字和分數
2. 將array排序,學⽣生物件照分數由⼤大排到⼩小

(假設原本的array,學⽣生分數並未由⼤大排到⼩小)
利⽤用for in,算出平均分數和找出分數最⾼高學⽣生的名字
和分數
class Student {
var grade = 60
var name = "peter"
}
var student1 = Student()
var student2 = Student()
student2.grade = 80
student2.name = "Jack"
var student3 = Student()
student3.grade = 90
student3.name = "penny"
var students = [student1, student2, student3]
var maxGrade = 0
var maxName = ""
var sum = 0
for student in students {
sum = sum + student.grade
if student.grade > maxGrade {
maxGrade = student.grade
maxName = student.name
}
}
maxGrade
maxName
var average = sum/students.count
array排序
像字典⼀一樣⽅方便搜尋的
dictionary
array不⽅方便搜尋,要利⽤用迴圈從頭開始找
像字典⼀一樣⽅方便搜尋的
dictionary
nil : 查不到資料
key (索引) 和 value (值)
dictionary的修改和新增

你的程式開發初體驗 (以Swift為例)