swift - 我的委托方法不应该变成 nil 吗?
问题描述
得到了 2 个 ViewControllers 第一个是 ViewController 第二个 TableViewCotnroller
class ViewController: UIViewController, CLLocationManagerDelegate, TabVCDelegate {
func reciveData(_ numberOfRows: Int) {
print(numberOfRows)
}
...
}
表视图控制器:
protocol TabVCDelegate {
func reciveData(_ numberOfRows: Int)
}
class TabVC: UITableViewController {
var delegate: TabVCDelegate?
@IBAction func passDataBack(_ sender: UIButton) {
delegate?.reciveData(5)
self.dismiss(animated: true, completion: nil)
print(delegate ?? "show me if its nil")
}
我的委托?.reciveData(5) 出于某种原因 nil 无法弄清楚当我有 2 个普通 ViewController 时它确实有效我错过了关于 TableViewControllers 的一些东西吗?或者也许是别的东西?任何帮助,将不胜感激。
解决方案
首先:
使该delegate
属性weak
避免强引用循环
weak var delegate: TabVCDelegate?
为了实现这一点,您的协议应符合class
protocol TabVCDelegate: class {
func reciveData(_ numberOfRows: Int)
}
下一步:
您必须在某处设置该委托。如果你TabVC
在你的类中引用了实例,ViewController
那么它看起来像这样:
tabVC.delegate = self
这里是关于“如何在 Swift 中创建委托”的详细描述
推荐阅读
- nginx - 带有错误页面的 Nginx 子页面位置指令
- ruby-on-rails - Rails:在 RSpec 辅助模块之间进行通信
- bash - 如何在 OSX 上更新 bash_profile 中的 PATH
- python - 如何使用 setup.py 导出多个包
- r - 分解 R 包中的 disag_model() 函数存在问题
- javascript - 未捕获的 SyntaxError:EXT JS 中的令牌无效或意外
- react-native - 获得屏幕“搜索”的“组件”和“儿童”道具。你只能通过其中之一
- webpack - Webpack 和生成器
- terminal - 在 Zsh 中将 stderr 变为红色的代码错误?
- c - 如何正确将 strcat 用于 char 数组?