期末 App — 鐵路時刻表

模仿是最好的學習,所以這次訂的主題就是 App Store 上常見的鐵路時刻表,並嘗試之前沒有玩過的 Json



主要頁面

選擇縣市地區

選擇車站

選擇日期

選擇時間

時刻表查詢後顯示班次時刻表,包含出發時間、抵達時間、搭乘時間、車種、車號、備註、是否每日行駛、是否有哺乳室、是否為殘障車次和是否為跨夜車。

點選右上方的 add button 可加入最愛路線

點選 cell 可加入搭乘紀錄

主頁下方可查看最愛路線

主頁下方可查看搭乘紀錄,包含火車班次資訊及搭乘日期


定義車站 Json 資料的型別

定義火車班次 Json 資料的型別

車站和火車班次資料的 Json decode

將找到的對應時刻表放入新定義的火車班次時刻表的型別

利用 QuickSort 按照離站時間將火車班次時刻表進行排序

UIRefreshControl

利用 UIAlertController 結合 UIPickerView,設定日期與時間

PickerView 主要程式碼

定義最愛路線的型別

定義搭乘紀錄的型別


問題集:

無法正確 Decoder

資料量很龐大,載入畫面後資料跑不出來,請教 Peter 才知道要利用

DispatchQueue.main.async {
self.tableView.reloadData()
}

QuickSort 中不需再額外定義 swap(),直接利用 Swift 的 swapAt(_:_:) 做交換資料

self.trainInfosInTimeLists.swapAt(i, index)

切割字串

let timeArray = timeString.split(separator: “:”)

Debug 時有一次出現這個,不太清楚箇中原因,但後來有解決

原本想直接利用政府資料開放平台的鐵路時刻表上傳的 Json 資料,但因為得到的資料是 .zip 檔,所以暫時先將資料上傳到 Github 替代。


這次時間相當緊湊,一開始訂完主題時已經在腦中彩排一次整個撰寫流程,加上經過上學期的試煉,table 算是相當熟悉,頁面間的傳遞資料也很 OK ,但真的實際撰寫程式碼後還是遇到很多問題,不熟悉的 Json 也卡關很久,瘋狂的谷歌資料進行 Debug,其實不僅僅是上面列出的問題,還有很多問題沒有列出,原因是真的太多參考資料了哈哈哈。

這學期也非常謝謝 Peter ,每次上課一直鼓勵我要寫出比上次更難的 App,而這句話我有獨特的見解,我把它解讀成盡量嘗試用更多不一樣的技術撰寫 App,所以相較於上學期的子彈筆記法,這學期的鐵路時刻表對我來說某方面也算是一種突破吧。