在使用segues(或不使用segues)时,是否有一种避免开放变量的方法? 每个人都看到这样的代码:
if segue.identifier == ListViewController.className()
{
guard let indexPath = tableView.indexPathForSelectedRow else { return }
let destinationVC = segue.destination as? ListViewController
var data: CategoryModel
data = filteredData[indexPath.row]
destinationVC?.passedData = data
}
}
但是在ListViewController
中,我们有一个可供访问的变量。
class ListViewController: UIViewController
{
//MARK: - DataSource
var passedData: CategoryModel?
也许可以避免这种情况?
我正在考虑使用init(data: data)
进行依赖项注入,但是如何正确启动此vc?
已编辑。
使用segue并不是主要目标。主要是制作var
private
。如果存在不使用segues和将数据私有化的好方法,我将很高兴知道。
我正尝试使用init()
和navigationController?.pushViewController(ListViewController(data: data), animated: true)
但
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
行:
self.tableView.register(ListTableViewCell.nib(), forCellReuseIdentifier: ListTableViewCell.identifier())
答案 0 :(得分:1)
您实际上无法使“界面”构建器为视图控制器使用自定义init,它将始终使用init?(coder:)
。
因此,将数据传递到视图控制器的最简单方法是使用非私有属性。
但是,如果您真的不想使用internal
或public
var,则始终可以尝试使用Singleton或Notifications,但我认为这样做不明智
答案 1 :(得分:0)
您可以这样做
-e include("$(ENV["HOME"])/.julia/config/startup-babel.jl") -i
在初始表视图控制器的class ListViewController {
private var passedData: CategoryModel?
private init () {
}
public convenience init (passedData: CategoryModel?) {
self.init()
self.passedData = passedData
}
}
中:
tableView(_:didSelectRowAt:)