我在視圖控制器中嵌入一個表視圖,並試圖從嵌入表控制器訪問父視圖控制器保存按鈕。如果有以下協議:Swift子類與協議
它的工作原理,如果我的tableviewcontroller子類(SettingsController)具有saveButton方法,我使用下面的代碼:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
guard let optionsTable = segue.destination as? SettingsController else {
fatalError("Unexpected destination: \(segue.destination)")
}
optionsTable.saveButton = self.saveButton
}
然而
,我嘗試使用下面的實現,使用協議:
protocol SettingsOptionsTable {
var saveButton: UIBarButtonItem? {get set}
}
SettingsController正在實現SettingsOptionsTable協議。然而,下面的代碼:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
guard let optionsTable = segue.destination as? SettingsOptionsTable else {
fatalError("Unexpected destination: \(segue.destination)")
}
optionsTable.saveButton = self.saveButton
}
給了我一個編譯錯誤:「不能分配給屬性:‘optionsTable’是一個‘讓’常量」
我不明白爲什麼。 optionsTable對象是常量,實現協議並分配一個屬性。 如果我將「guard let」更改爲「guard var」,代碼就可以工作。 任何人都可以向我解釋這一點? 感謝