gpt4 book ai didi

ios - 在两个不同的类中对同一文件使用委托(delegate)

转载 作者:行者123 更新时间:2023-11-28 11:27:40 24 4
gpt4 key购买 nike

所以我在同一个文件中有这两个类和一个这样的委托(delegate)

protocol LocationSelectionDelegate {
func didSelectLocation(name:String)
}
Class OneViewController:UIViewController{
var locationDelegate : LocationSelectionDelegate!

func viewDidLoad(){
locationPicker.pickCompletion = { (pickedLocationItem) in
// Do something with the location the user picked.

self.locationDelegate.didSelectLocation(name:pickedLocationItem.name)
}
}

}

Class Two:UITableViewCell,LocationSelectionDelegate{
override func awakeFromNib() {
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let oneViewController = storyBoard.instantiateViewController(withIdentifier: "oneViewController") as! OneViewController
oneViewController.locationDelegate = self
}
func didSelectLocation(name: String) {
selectedLocation = name
}
}

所以我有这些结构,locationPicker.pickCompletion 是来自另一个 View 的闭包,它返回用户选择的位置现在我正试图将所选位置名称传递给第二个类和所有这些代码在同一个文件上,当我运行这段代码时,它给出了一个错误,指出 Unexpectedly found nil while implicitly unwrapping an Optional value pointing to this line self.locationDelegate.didSelectLocation(name:pickedLocationItem.名称)那么我在这里做错了什么以及如何解决这个问题?

最佳答案

将类放在哪里并不重要。您需要将 OneViewController 的引用传递给 ClassTwo。您可以通过多种方式做到这一点。一种简单的方法是声明一个变量

Class Two:UITableViewCell,LocationSelectionDelegate{

var oneVc : OneViewController?{
didSet{
//Only set the locationDelegate when there is an actual value in oneVc variable
oneVc.locationDelegate = self
}
}
func didSelectLocation(name: String) {
selectedLocation = name
}
}

在 classTwo 中,并从 OneViewController 中设置它。

如果您在 OneViewController 中使用 ClassTwo 作为表格单元格,那么您可以在 cellforRow 方法中执行此操作。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "your_identifier", for: indexPath) as! ClassTwo
cell.oneVc = self
return cell
}

关于ios - 在两个不同的类中对同一文件使用委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57710260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com