我在一个视图控制器中有一个数组,想要发送给其他两个视图控制器-我正在通过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
错误-它如何同时适用于这两个视图?
感谢任何帮助:)
答案 0 :(得分:3)
这是崩溃的,因为您试图投射错误的视图控制器。这就是segue.destination
或FollowersUsersViewController
的{{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
}
}
描述性会降低,但会更加优雅和迅捷。