繁体   English   中英

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

[英]Send array from 1 view controller to 2 other separate view controllers

我在一个视图控制器中有一个数组,想要发送给其他两个视图控制器-我正在通过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错误-两者如何工作?

感谢任何帮助:)

这是崩溃的,因为您尝试投射错误的视图控制器。 那是在单次迭代中segue.destination要么FollowersUsersViewControllerFollowingUsersViewController

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

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let controller = segue.destination as? FollowersUsersViewController {
        controller.followingUserId = userId
    } else if let controller = segue.destination as? FollowingUsersViewController {
        controller.followingUserId = userId
    }
}

可以改进此代码的一件事是使两个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
    }
}

它的描述性会降低,但会更加优雅和快捷。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM