昨天我們已經將資料打包完成了,離完成鬧鐘功能只差一點點了,
只要把資料回傳到首頁,就可以實現新增鬧鐘的功能了!
這邊將會使用Delegate的方式做資料回傳,馬上來看看如何傳值吧!
之前有稍微用我的方式介紹過Delegate的概念,有興趣的可以參考「Day15」
那馬上來實作吧!
protocol UpdateAlarmListDelegate: AnyObject{
// 該Protocol含有一個Function,帶有一個參數:「alarmData」,其型態為「AddAlarmInfo」
func updateAlarmList(alarmData: AddAlarmInfo)
}
weak var updateAlarmListDelegate: UpdateAlarmListDelegate?
@objc func saveAlarm() {
// 實體化我們創建的Struct「AddAlarmInfo」,並裝在saveAlarmData內
//「AddAlarmInfo」的第一個參數,就給他DatePicker上面的時間
//「AddAlarmInfo」的第二個參數,就給他標籤的內容
let saveAlarmData = AddAlarmInfo(time: self.datePicker.date,
annotation: self.addAlarmDetails[1])
// 使用updateAlarmListDelegate內的「updateAlarmList」回傳「saveAlarmData」
updateAlarmListDelegate?.updateAlarmList(alarmData: saveAlarmData)
// 將新增鬧鐘頁面給關閉
self.dismiss(animated: true, completion: nil)
}
@objc func addAlarm() {
let vc = AddAlarmViewController()
// 指定「AddAlarmViewController」的Delegate由該Controller實作
vc.updateAlarmListDelegate = self
let nv = UINavigationController(rootViewController: vc)
present(nv, animated: true, completion: nil)
}
此時會跳出以下Error,該Error的意思是:
你告知「UpdateAlarmListDelegate」將由這個Viewcontroller實作,
但卻沒實作裡面的Function:「updateAlarmList」
因此,可以在Class外面,加入以下Code來實作「updateAlarmList」
extension AlarmViewController: UpdateAlarmListDelegate {
func updateAlarmList(alarmData: AddAlarmInfo) {
// print看看回傳過來的值是什麼
print(alarmData)
}
}
來試試看Print出來的會是什麼吧!首先先做以下設定
按下儲存看看會Print出什麼吧!
已經確定可以正常傳值了,只是時間的值好像怪怪的?
明天來了解一下是什麼狀況,順便將這些值新增在鬧鐘上吧!