将数组从1个视图控制器发送到2个其他单独的视图控制器

时间:2019-03-22 13:34:44

标签: ios arrays swift

我在一个视图控制器中有一个数组,想要发送给其他两个视图控制器-我正在通过prepareForSegue:

var userId = ""

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let FollowersUsersViewController = segue.destination as! FollowersUsersViewController
    FollowersUsersViewController.followersUserId = userId

    let FollowingUsersViewController = segue.destination as! FollowingUsersViewController
    FollowingUsersViewController.followingUserId = userId
}

对于其他2个视图控制器,我这样调用数组:

视图控制器1:

var followersUserId = String() 
let followersProfileId = followersUserId

视图控制器2:

var followingUserId = String() 
let followingProfileId = followingUserId

当我将其发送到视图控制器之一(并注释掉另一个)时,它似乎可以工作,但是当我运行该应用程序时,只有一个按钮可以工作。当我对两个视图控制器都执行此操作时(如上),我遇到一个Thread 1: signal SIGABRT错误-它如何同时适用于这两个视图?

感谢任何帮助:)

2 个答案:

答案 0 :(得分:3)

这是崩溃的,因为您试图投射错误的视图控制器。这就是segue.destinationFollowersUsersViewController的{​​{1}}的一次迭代。

在使用之前,您已经有条件地进行了铸造。
试试这个代码

FollowingUsersViewController

答案 1 :(得分:1)

您可以做的一件改进此代码的事情是使两个VC都符合强制执行此变量的协议:


protocol UserIdController {
    var userId: UUID { get set }
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let viewController = segue.destination as? UserIdController {
            viewController.userId = userId
    }
}

描述性会降低,但会更加优雅和迅捷。