106
你的程式開發初體驗 (Swift) 講師:彼得潘 [08/15]

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

  • Upload
    -pan

  • View
    234

  • Download
    0

Embed Size (px)

Citation preview

 你的程式開發初體驗  (Swift)  講師:彼得潘  

[08/15]

彼得潘簡介

App程式設計⼊入⾨門:iPhone.iPad

Swift程式設計⼊入⾨門

正職: 作家 副業: 專欄作家,⼯工程師,講師,顧問,家教,創業家

20幾款APP

相關教學資源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

程式語⾔言是什麼?⼈人類和電腦溝通的語⾔言

利⽤用程式語⾔言,命令電腦做事

切記: 電腦智⼒力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影響程式編譯速度

$:⼀一萬多

XcodeApp 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<= 1000i = 2, i<= 1000

i = 1000, i<= 1000 sum = sum + 1000

sum = sum + 1sum = 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的修改和新增