使用自定义结构数据类型时,如何将数据传递给另一个视图控制器?我认为我遇到的问题是在第二个视图控制器中定义变量。
这就是我将数据传递到下一个视图控制器的方式:
let sessionDetailsViewController = segue.destination as! SessionDetailsViewController
let indexPathRow = sender as! Int
sessionDetailsViewController.session = myFeed[indexPathRow]
哪里session
是结构数据类型,Feed
。
然后在我SessionDetailsViewController
试图session
像这样设置变量:
var session: Feed
但是,如果执行此操作,则会收到有关没有初始化程序的错误。因此,我尝试像这样实现一个初始化程序:
init(session: Feed) {
self.session = session
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented, SessionDetailedViewController")
}
该应用程序将进行编译,然后当我触发此类的segue时,它将在fatalError调用上崩溃。
以前,在使用Feed
结构数据类型之前,我一直在使用NSDictionary
,其定义如下:
var session = NSDictionary()
这很好。如果我尝试对采取相同的方法Feed
,则Xcode会尝试使我创建一个新Feed
对象,该对象将包含其所有参数(正如我所知,这是预期的,将()
创建一个新实例)。
那么,如何将所需的参数传递给该视图控制器?另外,有没有办法确保始终用这些参数实例化此控制器(因为我认为这将是一种很好的编码习惯)?
您可以声明session
它是一个隐式解包的可选(将在prepare(for:sender:)
启动segue的视图控制器中进行设置)。无需自定义init
。
var session: Feed!
要清楚,Feed!
是可选的。它只是一个“隐式解包”的可选(无论您在何处使用它都隐式解包)。如果您的应用程序中的逻辑指示可能尚未init
完成设置,则使用它,但是一旦实际使用它,它将始终被设置(在这种情况下)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句