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

彼得潘 Pan
彼得潘 PanLead Software Engineer at 作家,iOS程式講師,App工程師
 你的程式開發初體驗	
  (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的修改和新增
1 of 106

More Related Content

Viewers also liked

Standford 2015 week9Standford 2015 week9
Standford 2015 week9彼得潘 Pan
1.5K views62 slides
iOS 入門教學iOS 入門教學
iOS 入門教學Steven Shen
32.3K views88 slides
Standford 2015 week8Standford 2015 week8
Standford 2015 week8彼得潘 Pan
1.1K views72 slides
為愛打造App為愛打造App
為愛打造App彼得潘 Pan
1.8K views56 slides

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

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