使用自定义结构数据类型将数据传递到另一个视图控制器,需要初始化程序吗?

吐司

使用自定义结构数据类型时,如何将数据传递给另一个视图控制器?我认为我遇到的问题是在第二个视图控制器中定义变量。

这就是我将数据传递到下一个视图控制器的方式:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

iOS-将数据传递到另一个视图控制器

将数据传递到导航控制器中的另一个视图控制器

准备segue时无法将数据传递到另一个视图控制器

将创建的数据传递到另一个控制器

调用函数或将数据传递到另一个控制器AngularJS

尝试将数据传递给另一个视图控制器时出现致命错误

如何将数据从视图控制器传递到导航控制器,然后再传递到另一个视图控制器?

将返回数据传递到同一控制器laravel中的另一个函数

如何将标签数据传递到第二个视图控制器中的另一个标签

使用segues时,将数据传递给初始化初始化程序之前的视图控制器。(迅速)

如何在关闭ViewController时将数据传递到另一个控制器?

Swift 4将数据传递到另一个控制器而没有显示在同一个控制器中

将数据传递给另一个控制器并保存?

Laravel 7 将数据传递给另一个控制器

如何将数据从一个视图控制器传递到另一个?

如何将数据从一个视图控制器传递到另一个SWIFT

如何将数据从一个视图控制器传递到另一个视图控制器,并且在视图控制器之间有一个显示视图控制器

斯威夫特。将持久数据从一个视图控制器传递到另一个视图控制器并存储在标签数组中

使用模型将数据传递到另一个视图 - SwiftUI

将数据从视图传递给控制器,其中数据来自另一个控制器

将 JSON 数据从 HTTP 请求传递到 Swift 3 中的另一个视图控制器

实例化另一个视图控制器时如何传递数据

将数据从角度形式传递到另一个控制器

使用可选的初始化程序将自定义数据类型存储在@AppStorage中吗?

无法使用Segue Swift 5将数据从一个控制器传递到另一个控制器

如何将数据从一个视图控制器传递到导航控制器中嵌入的另一个视图控制器

如何将所选数据传递回上一个视图控制器

如何将不同的数据从表视图传递到另一个视图控制器

使用Firebase将图像从一个视图控制器传递到另一个(swift)