Ios 使用segues将数据传递给另一个vc的方法,无需打开var
在使用segues(或不使用segues)时,有没有避免开放变量的方法? 每个人都看到这样的代码:Ios 使用segues将数据传递给另一个vc的方法,无需打开var,ios,swift,xcode,Ios,Swift,Xcode,在使用segues(或不使用segues)时,有没有避免开放变量的方法? 每个人都看到这样的代码: if segue.identifier == ListViewController.className() { guard let indexPath = tableView.indexPathForSelectedRow else { return } let destinationVC = segue.destination as? ListViewCo
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
私有化
。如果存在不使用segues和将数据推至私有的好方法,我将很高兴知道
我试图使用init()
和navigationController?.pushViewController(ListViewController(数据:数据),动画:true)
但是
线程1:致命错误:在第行展开可选值时意外发现nil
:
self.tableView.register(ListTableViewCell.nib(), forCellReuseIdentifier: ListTableViewCell.identifier())
你可以这样做
class ListViewController {
private var passedData: CategoryModel?
private init () {
}
public convenience init (passedData: CategoryModel?) {
self.init()
self.passedData = passedData
}
}
并在初始表视图控制器的表视图(uu:didSelectRowAt:)
中:
let data: CategoryModel = filteredData[indexPath.row]
let destinationVC = ListViewController(passedData: data)
self.present(destinationVC, animated: true, completion: nil)
实际上,您不能让Interface builder为视图控制器使用自定义初始化,它将始终使用
init?(编码器:)
因此,将数据传递到视图控制器的最简单方法是使用非私有属性
但是,如果你真的不想使用
内部
或公共
变量,你可以尝试使用单例或通知,但我认为这不是明智的我相信目标是将传递数据
私有化,但仍然以某种方式使用segue。@rmaddy在使用时不可能将其私有化还是私有化segue?@Carpsen90我有一个错误,tableView
outlet在self.tableView.register(ListTableViewCell.nib(),forCellReuseIdentifier:ListTableViewCell.identifier())时为零。谁应该调用便利初始值设定项?如果您使类派生自UIViewController
,它就不会编译。而且根本不使用destinationVC
。@Carpsen90让destinationVC=ListViewController(passedData:data)
未使用。也许我只是想把这个变量设为私有变量,但这会如何影响代码的可测试性呢?事实证明,任何方法都可以把任何东西放在那里。这让我担心。我不喜欢单音,但我发现任何对segues的偏离只会使代码复杂化。我不确定这里的可测试性是不是一个问题。如果您对可测试性和良好的体系结构感兴趣,您可能希望尝试Clean Swift或VIPER。是的,我会使用一个var并保持代码简单这些链接可能会有帮助,而这一个