У меня есть два класса. Один класс называется ViewController
, а другой класс - TabView
.Swift не может вызвать метод протокола через делегат
Моя цель - вызвать функцию changeTab()
, которая находится внутри класса TabView из ViewController.
Как-то у меня возникают проблемы с этим, потому что каждый раз мой делегат nil
.
Вот мой код ViewController:
protocol TabViewProtocol: class {
func changeTab()
}
class ViewController: NSViewController {
// delegate
weak var delegateCustom : TabViewProtocol?
override func viewDidLoad() {
print(delegateCustom) // outputs "nil"
}
buttonClickFunction() {
print(delegateCustom) // outputs "nil"
delegateCustom?.changeTab() // doesn't work
}
}
Вот мой код TabView:
class TabView: NSTabViewController, TabViewProtocol {
let myVC = ViewController()
override func viewDidLoad() {
super.viewDidLoad()
myVC.delegateCustom = self
}
func changeTab() {
print("test succeed")
}
}
Может кто-нибудь объяснить мне, что я делаю неправильно? - Я новичок в делегатах и протоколах ...
Вы всегда создает новую 'ViewController' через 'ViewController()' - что новый контроллер, вероятно, не имеет никакого отношения к остальной части приложения. Вы должны иметь некоторую связь между двумя экземплярами - не создавать новые экземпляры. Как правило, это должно быть легко выполнимо с помощью конструктора интерфейса. – luk2302
Обновлен мой ответ. Так было у меня раньше ... Не работает – Anokrize
И он не работает через интерфейс, потому что я его не использую. @ luk2302 – Anokrize