我正在尝试使用委托(delegate)(用于测试)将文本输出到 viewDidLoad,但是没有任何反应
protocol LoaderDelegate: class {
func LoadData(_ controller: SearchPhotosViewController)
}
class LoaderData: LoaderDelegate {
func LoadData() {
print("Hello from LoaderData")
}
}
class SearchPhotosViewController: UICollectionViewController {
// MARK: - Properties
weak var delegate: LoaderDelegate?
override func viewDidLoad() {
super.viewDidLoad()
print("Hello from viewDidLoad")
delegate?.LoadData()
}
}
最佳答案
首先,您应该从LoaderDelegate.LoadData
中删除参数,因为当前代码无法编译(LoaderData.LoadData
的签名与协议(protocol)的签名不匹配).
protocol LoaderDelegate: class {
func LoadData()
}
您已正确设置委托(delegate),但尚未为委托(delegate)设置值。通常,委托(delegate)模式用于“向后传递数据”。在显示 SearchPhotosViewController
(或使用 SearchPhotosViewController
的任何东西)的 View Controller 中,将 delegate
设置为 LoaderData 的实例
:
searchPhotosViewController.delegate = LoaderData()
现在当加载搜索照片 View 时,您将在日志中看到“Hello from LoaderData”。
如果 SearchPhotosViewController
实际上是根 VC,那么委托(delegate)模式可能不适合这里。但是您仍然可以通过在 viewDidLoad
中设置 delegate
使其打印“Hello from LoaderData”(但这有点毫无意义):
override func viewDidLoad() {
super.viewDidLoad()
print("Hello from viewDidLoad")
delegate = LoaderData()
delegate?.LoadData()
}
关于swift - 使用委托(delegate)时没有任何反应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57809877/