Swift class / 6. 建立func與class

Miki Fan
MorrisDesign
Published in
5 min readAug 16, 2016

這兩週反覆練習這兩項,就一次寫完吧!

建立function的用意在於快速帶入功能,性質跟var較像。而class(物件)則是對於不同條件下呼叫不同內容,執行相同功能,所以class裡面是可以包含func的。先來個兩者初次見面的簡易案例。

花了50塊喝牛奶
class Baby {func eatFood(name:String, price:Int) {var message = “花了\(price)吃\(name)” }}var cuteBaby = Baby()cuteBaby.eatFood(name: “milk”, price: 700)

1. 靈活運用的工具包func

func有型別,func內的參數也可以是func,主要的寫法如下:

func 名稱(參數:參數型別) -> 回傳型別 {return 回傳內容}
//要記得寫return才會回傳結果

案例1. func calculate: 計算1~12區間內,5的倍數的總和

calculate: 計算start到end區間內,mutiple的倍數的總和

案例2. eatAndExercise: 將不同func分別帶入sport參數,會回傳不同結果

將playTableTennis和playBasketball兩個func分別帶入sport參數,會回傳不同結果

案例3. buyBook: 根據不同書名和價錢,回傳”花了多少錢買書”的字串

呼叫功能時,一併將參數帶入

案例4. createMovieMessage: 針對不同年紀和電影,有不同的訊息

參數也可以先未定型別,呼叫時要加!驚嘆號,例如message4那樣

2. 一定要有初始值的Class

Class主要的寫法如下,名稱通常大寫,init代表初始值,初始值下方的變數僅發生在此項目中。

class 物件名稱 {
var 屬性名稱 =
func 功能名稱(){
}
}
var 變數名稱 = 物件名稱()

呼叫方式則是用點

變數名稱.屬性名稱
//如果要更改屬性就在後方直接=新值

案例1. cuteBaby: 當只知道小孩名or年紀時,可以講的話

當變數帶入的參數不同時,顯示不同訊息

案例2. Food: 檢查有無兩小時就喝一次牛奶,這案例主要是設定物件Food(用來回傳牛奶)、Baby(檢查喝牛奶時間),用cutebaby3/4來帶出結果。

這裡的if let用來檢查有無內容,冒號後方都算型別(ex:Baby3)

3. 大量資料用Array

Array從零開始算,在var names =等號後加括號[]表示。

案例一:找出最高分數 這個案例結合了for…in…與Array,設置條件逐一對比,可找出五位學生中分數最高的那位。

案例一

案例二:比較班上分數 先設定物件Student及其初始值,後續設立多個變數+變數初始值,沒有設定的就照初始值(Ex: var student1)。設陣列students包涵這些學生,並算出成績最好的人,與平均成績。

案例二

Array的其他用法:

var names = [String]() //成員都是字串var names = ["A","B","C"] 
names.append("D") //陣列加入字串D
names = names + ["D"] //陣列加入字串D

這堂課的感想:命名很重要。

到最後一個案例可以看到有點亂了,就跟編檔名一樣,練習時一直用baby導致有baby1/2/3/4/到最後就跟數字混淆了,需要更高級的命名方式啊!

其他還有教到array(用於比較/抽取大量樣本)於8/31補充完畢,這堂課就記錄到這邊:)

--

--

Miki Fan
MorrisDesign

An Interaction designer. Sharing something learned from life.