close

上次 697 - iOS App - Table View  是在 controller 的 delegate function 裡硬填一些資料進去,但實際上當然不能這樣作,所以需要其他的 class 來幫忙。

首先新增一個 Car 的結構來存放一台車子的相關資料。但我們不應該在 view controller 裡存一個 Car 陣列,這應該是 Model 要作的事。

所以要新增一個叫 CarsManager 的 Model class,這裡頭放了 Car 陣列,以及提供一些函數。首先是總共有多少車子的函數,再來是讀取一台車子資訊的函數,這兩個都是為了讓 view controller 的 delegate 函數呼叫。

接著就是在 view controller 增加一個 CarsManager 的變數,然後先前的 delegate 函數要呼叫 CarsManager 提供的對應函數以取得真正的值。

這樣修改後得到的畫面如下:

CarsTableView2.png

已經可以顯示較為真實的內容了!看來加上圖片就可以讓這頁變得很不錯!

* * * * * * * * * *

而 struct 和 class 有什麼不同呢?什麼時候該用哪種型態呢?看到的文件說:會被繼承,一定就要選 class!那還有什麼其他不同的地方?struct 在 Swift 會自動得到一個 constructor, class 則沒有。還有就是 struct 變數是 call by value,也就是會被複製一份,而 class 則是 call by reference,一直存取到同一份資料。就這個 App 而言,車子就是最基本的資料了,沒有要再延伸其他什麼用途,所以就設為 struct。

有個地方還是沒搞懂,在 CarsManager 裡提供了這樣的函數:

    func getCar(at index: Int) -> Car {
        return cars[index]
    }

其實這也表示一開始要把所有車子都讀進來?那不是就可能一開始就載入一百萬筆? 也許這邊我們自己應該要自己加上控制,比如一次讀入 1000 筆,接下來被呼叫時若 index 已經存在,就從陣列讀取,否則就再重讀另 1000筆存取來,才不會對 DB 作大量的讀取。

 

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 屁啦屁啦 的頭像
    屁啦屁啦

    玩小車的小屁孩爸

    屁啦屁啦 發表在 痞客邦 留言(0) 人氣()