Page 1
你的程式開發初體驗 (Swift) 講師:彼得潘
[08/15]
Page 2
彼得潘簡介
App程式設計⼊入⾨門:iPhone.iPad
Swift程式設計⼊入⾨門
正職: 作家 副業: 專欄作家,⼯工程師,講師,顧問,家教,創業家
Page 4
相關教學資源http://www.facebook.com/iphone.peterpan
http://deeploveapple.blogspot.tw
[email protected]
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
Page 5
程式語⾔言是什麼?⼈人類和電腦溝通的語⾔言
利⽤用程式語⾔言,命令電腦做事
切記: 電腦智⼒力100,運動0分,它可以計算和林志玲表⽩白成功的機率,
卻無法幫我們跑腿買便當
Page 6
其實 電腦只懂 0 & 1
程式語⾔言最後會被轉換為0 & 1
⼆二進位
Page 7
程式執⾏行
CPU讀取記憶體中的程式碼執⾏行
程式執⾏行時,資料暫存於記憶體
永久保存的資料需寫⼊入檔案
Page 8
為什麼學Swift
https://blog.alphacamp.co/2015/07/27/for-swift-beginners/
Page 10
硬體上的準備• Mac
• PC上裝破解的Mac作業系統 (不建議)
Macbook Air
Mac Mini記憶體愈多愈好
CPU影響程式編譯速度
$:⼀一萬多
Page 11
XcodeApp StoreFree
Apple ID登⼊入
https://itunes.apple.com/app/xcode/id497799835
Page 12
Xcode
https://developer.apple.com/xcode/downloads/
搶先下載尚未公開的最新beta版可直接下載,無需登⼊入
Page 13
Xcode playground Swift練功的秘密花園
Page 14
建⽴立playground⽅方法⼀一
⽅方法⼆二
Page 16
playground主畫⾯面
程式碼編輯區塊 結果即時顯⽰示區塊
Page 17
整數和浮點數 ⼼心算⼗十段的數學神童
Page 18
數學神算
加減乘除 整數和浮點數 負數
結果⾏行⾏行對應
Page 19
練習
1的平⽅方加2的平⽅方,⼀一路加到9的平⽅方
Page 21
語⾔言天才
字串相加 以" " 包含字串內容
Page 25
遇錯即停下腳步的膽⼩小playground
不會執⾏行
由上⽽而下執⾏行,遇錯即中斷
Page 27
宣告變數儲存資料
可變
關鍵字: var
age佔據某個記憶體空間記憶體位址落落⻑⾧長,沒⼈人記得起來, 所以我們需要好記的變數名稱
Page 31
專⼀一 ⼀一⽣生只愛某⼀一型
沒結果就是事情⼤大條了 ! age只能儲存Int
更安全
Page 32
報錯的Console Output
Page 34
明明⽩白⽩白我的型別內建型別: Int,String,Double還有許許多多不同的型別,可儲存不同資料
甚⾄至還可以⾃自⼰己發明新的型別
Page 35
練習
宣告3個變數,分別儲存⾃自⼰己⾼高中聯考的數學,英⽂文,國⽂文分數
分數相加除以3求平均
Page 36
字串置換⼤大法
\(變數名 )
http://margaret1122.pixnet.net/blog/post/39111405-【台北好咖啡】台灣最貴的咖啡茶館? 國⽗父紀
Page 37
練習
我的名字是xxx,年齡xxx,⾝身⾼高xxx,...
宣告變數
以字串置換⾃自我介紹:
Page 38
如果你是我的傳說 真的還是假的 (if else)
Page 40
⽐比較運算⼦子
< <= >
>= == !=
Page 43
多個條件,多層if 擇偶條件怎麼可能只有⼀一個
Page 45
||: 知⾜足,只要⼀一個滿⾜足就好
Page 49
變數⽣生存的區間
message只存在 { } 裡
Page 50
練習以if else描述⾃自⼰己的擇偶條件
需⽤用到else,多層if,&&, ||
認真研讀penny的擇偶條件歌詞,以程式表達
http://mojim.com/twy105574x1x1.htm
Page 52
1+2+3,⼀一路加到1000
加到1000 ? 全部打完可以下課了 !
不能說的秘密: 愈厲害的⼯工程師,其實愈懶惰
Page 53
for迴圈
⼀一千次
初始條件 繼續執⾏行的條件
每⼀一次的變化
Page 54
for迴圈
i = 1, i<= 1000i = 2, i<= 1000
i = 1000, i<= 1000 sum = sum + 1000
sum = sum + 1sum = sum + 2
i = 1001, i<= 1000 不成⽴立
Page 55
顯⽰示結果的⼤大眼睛折線圖
移動折線圖上顯⽰示結果的點
Page 56
顯⽰示結果的⼤大眼睛最終結果
歷史記錄
Page 59
無間道的無間地獄 無窮迴圈佛曰:「受身無間者永遠不死,壽長乃無間地獄中之⼤大劫。︒」
Page 60
無窮迴圈
永遠不回頭,永遠不結束
App閃退
Page 61
while迴圈
while後設定繼續執⾏行的條件
Page 62
練習1. 計算1的平⽅方加2的平⽅方,⼀一路加到100的平⽅方,分別以for & while實作
2. 計算2的平⽅方加4的平⽅方,⼀一路加到100的平⽅方,分別以for & while實作 (偶數的平⽅方)
Page 65
定義和呼叫function
func 名稱 ( ) { 程式碼區塊 }+ + +
function裡的變數,只存在 { }裡
定義
呼叫 function名稱 + ( )
Page 67
接受參數的function
參數名 : 型別+ +
更彈性
Page 70
Swift Standard Library Function 內建function
Page 71
練習定義function,接受3個參數,起始值,最⼤大值和每次累加值, 回傳運算結果
例⼦子: 起始值 10, 最⼤大值 20,每次累加值3
10 + 13 + 16 + 19 = 58
Page 73
沒有物件的凌亂世界 許許多多的變數記錄寶寶們的資訊
Page 74
類別和物件 不⽤用懷胎⼗十⽉月,也能⽣生出寶寶物件
Page 77
定義屬性
愈多屬性,佔據愈多記憶體
Page 78
讀取物件屬性
變數名 屬性名.+ +
Page 79
修改物件屬性
變數名 屬性名.+ + = 新值+ +
Page 80
練習
⽣生了n個寶寶 (可以是真的,也可以是幻想的)
設定每個寶寶的名字,星座,體重,⾝身⾼高,年齡
定義寶寶類別,包含名字,星座,體重,⾝身⾼高,年齡等屬性
Page 81
定義物件能⼒力的⽅方法(method)
其實是function,只是住在類別 { } 裡
Page 82
呼叫⽅方法
呼叫⽅方法時需包含參數名稱 (第⼀一個參數例外) Swift 2.0時,function也採取⼀一樣的規則
物件變數名 ( .+ + )⽅方法名 參數+ + +
需透過物件呼叫
Page 83
為何要包含參數名 -> 增加可讀性
700克 ? 700元?
Page 84
如何判斷是呼叫⽅方法或存取屬性
有( ): 呼叫⽅方法
無( ): 存取屬性
Page 85
⽅方法裡可存取物件⾃自⼰己的屬性
self: 物件⾃自⼰己
Page 86
指到物件的屬性 彼得潘養的可愛兔⼦子⽩白彼得
Page 87
• 看到的按鈕,圖⽚片都是物件• 物件的播放⾳音樂method,使得App可以播放⾳音樂
• 歌名是⿊黑⾊色,是因為物件的⽂文字顏⾊色屬性設為⿊黑⾊色
• iOS SDK定義各式各樣不同功能的類別,⽐比⽅方顯⽰示地圖,播放⾳音樂,顯⽰示網⾴頁
App裡的物件
Page 88
練習
在前⾯面練習定義的寶寶類別裡定義function
建⽴立寶寶物件並呼叫其function
Page 90
沒有array,變數超多的 悲慘世界
100個⼥女朋友名字變數
100個學⽣生分數變數
Page 92
領取號碼牌,乖乖排隊的array
[ 開始, ] 結尾, , 分隔, 容納無限多的成員
以號碼存取成員,號碼從0開始
Page 93
不存在的號碼
當掉 !Array index out of range
Page 94
修改array成員 ⼼心太軟,為了⼈人⼈人及格,調⾼高學⽣生分數
Page 95
新增array成員 補考,新增學⽣生分數
append:
insert:
加到尾巴
加到某個特定位置
array是struct struct類似類別,也有屬性和⽅方法
Page 98
array和for的結合 找出班上第⼀一名
練習
Page 99
array和for的結合 找出班上第⼀一名
找出最後⼀一名
Page 100
array和for in的結合 找出班上第⼀一名
Page 101
練習定義學⽣生類別,包含名字和分數2個屬性
建⽴立包含5個學⽣生物件的array
建⽴立包含5個學⽣生物件的array
1. 利⽤用for in,算出平均分數和找出分數最⾼高學⽣生的名字和分數
2. 將array排序,學⽣生物件照分數由⼤大排到⼩小(假設原本的array,學⽣生分數並未由⼤大排到⼩小)
Page 102
利⽤用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
Page 104
像字典⼀一樣⽅方便搜尋的dictionary
array不⽅方便搜尋,要利⽤用迴圈從頭開始找
Page 105
像字典⼀一樣⽅方便搜尋的dictionary
nil : 查不到資料
key (索引) 和 value (值)
Page 106
dictionary的修改和新增