Swift 使用委托时不会发生任何事情
我试图使用委托(用于测试)将文本输出到viewDidLoad,但什么也没有发生Swift 使用委托时不会发生任何事情,swift,delegates,Swift,Delegates,我试图使用委托(用于测试)将文本输出到viewDidLoad,但什么也没有发生 protocol LoaderDelegate: class { func LoadData(_ controller: SearchPhotosViewController) } class LoaderData: LoaderDelegate { func LoadData() { print("Hello from LoaderData") } } class SearchPhotosV
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
的签名与协议的签名不匹配)
您已正确设置了委托,但尚未为委托设置值。通常,委托模式用于“向后传递数据”。在显示SearchPhotosViewController
的视图控制器(或使用SearchPhotosViewController
的任何东西)中,您将委托设置为LoaderData
的实例:
searchPhotosViewController.delegate = LoaderData()
现在,当加载search photos视图时,您将在日志中看到“Hello from LoaderData”
如果SearchPhotosViewController
实际上是根VC,那么这里可能不适合使用委托模式。但是您仍然可以通过在viewDidLoad
中设置delegate
,使其打印“Hello from LoaderData”(但这有点毫无意义):
需要有人创建一个强持有的LoaderData
实例,并将其分配给SearchPhotosViewController
中的delegate
。现在,它只是nil
,因此什么也不做。这通常由演示VC完成。委托为零。您需要一些类来显式处理委托
,请检查以下内容:我不太明白应该在何处添加“searchPhotosViewController.delegate=LoaderData()”?@CoffeinTime视图控制器显示什么searchPhotosViewController
?在显示SearchPhotosViewController
之前写上这行。我不明白。如何将此代码放置在LoaderData类或SearchPhotosViewController类以外的其他位置,这将导致错误。@Coffeintime您的项目中是否只有这两个类?如果是这样,则不应使用委托模式。读我的最后一段,我只是想了解它们是如何工作的。将来我想用它上传照片。委托不是为了这些目的而创建的吗?将部分职责转移到另一个班级。
searchPhotosViewController.delegate = LoaderData()
override func viewDidLoad() {
super.viewDidLoad()
print("Hello from viewDidLoad")
delegate = LoaderData()
delegate?.LoadData()
}