昨天我們已經完成使用Delegate回傳值到首頁的部分了,那今天就要來完成最後一個步驟:
馬上開始吧!
var alarmDatas: [AddAlarmInfo] = []
extension AlarmViewController: UpdateAlarmListDelegate {
    
    func updateAlarmList(alarmData: AddAlarmInfo) {
        
        // 將回傳回來的鬧鐘資訊加入該陣列內
        self.alarmDatas.append(alarmData)
    }
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        switch section {
        case 0:
            // 第一個Section下顯示一個Cell即可
            return 1
        case 1:
            // 第二個Section顯示的Cell數量為:alarmDatas陣列的成員個數
            return alarmDatas.count
        default:
            // 其餘不顯示任何Cell
            return 0
        }
    }
case 1:
            // 將實作的AlarmOtherTableViewCell實體化,並顯示於第二個Section的畫面上
            guard let cell = tableView.dequeueReusableCell(withIdentifier: AlarmOtherTableViewCell.identifier, for: indexPath) as? AlarmOtherTableViewCell else { return UITableViewCell() }
            
            // 每個cell的alarmTimeLabel的文字內容 放入 相對應「alarmDatas」的time
            cell.alarmTimeLabel.text = alarmDatas[indexPath.row].time
            // 每個cell的alarmNoteLabel的文字內容 放入 相對應「alarmDatas」的annotation
            cell.alarmNoteLabel.text = alarmDatas[indexPath.row].annotation
            
            return cell
 
OH~ 原來是「alarmDatas」陣列內的time是屬於Date型別,Date型別無法放入Label的文字內,
因此我們必須要做一個Date轉換為String的動作。
// 實作Function:「dateToString」,一共有兩個參數
// 第一個date  是: 要轉換的時間
// 第二個format是: 要轉換爲何種時間格式
func dateToString(date: Date, format: String) -> String {
      
    // 宣告dateFormatter
    let dateFormatter = DateFormatter()
        
    // 設定要轉換的時間格式為: 帶入的參數「format」
    dateFormatter.dateFormat = format
        
    // 將時間轉換為字串後回傳
    return dateFormatter.string(from: date)
        
}
case 1:
            // 將實作的AlarmOtherTableViewCell實體化,並顯示於第二個Section的畫面上
            guard let cell = tableView.dequeueReusableCell(withIdentifier: AlarmOtherTableViewCell.identifier, for: indexPath) as? AlarmOtherTableViewCell else { return UITableViewCell() }
            
            // 每個cell的alarmTimeLabel的文字內容放入
            // 相對應「alarmDatas」的time
            cell.alarmTimeLabel.text = dateToString(date: alarmDatas[indexPath.row].time, format: "HH:mm")
            
            // 每個cell的alarmNoteLabel的文字內容放入
            // 相對應「alarmDatas」的annotation
            cell.alarmNoteLabel.text = alarmDatas[indexPath.row].annotation
            
            return cell
執行看看吧!



 怎麼失敗了呢?
怎麼失敗了呢?
原因是當你更改「alarmDatas」陣列的值後,並沒有人通知TableView已經更改值了,要更新畫面了
因此加入以下程式碼,通知TableView該刷新畫面囉!
    var alarmDatas: [AddAlarmInfo] = [] {
        // didSet的意思是:當這個變數被變更時,執行以下動作
        didSet {
            
            // TableView的畫面更新
            alarmTableView.reloadData()
        }
    }
再執行看看吧!




成功啦!!!
這次鐵人賽也告一個段落了
雖然這段日子有快樂也有不快樂,但這些日子也是我人生中不會忘記的一段時間
很感謝這些日子的陪伴,希望大家接下來都能快快樂樂的:)
若對於任何一篇文章有疑問的,也很歡迎大家留言告訴我,
感謝大家的觀看!我們有緣就下次鐵人賽見囉!