在Swift中通过segue传递多个变量
问题描述:
我见过很多教程,其中人们将单个变量通过segue传递给单独的视图控制器。但是,我怎样才能发送一个完整的结构或一类信息到一个单独的segue?并在另一边解开它?例如:在表格视图中,我点击一个玩家的名字,它会继续在另一个视图控制器中显示细节。在Swift中通过segue传递多个变量
举例:棒球名册阵容...
class Player {
var playerName: String = ""
var playerPosition: String = ""
var playerImage: UIImage = ""
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedPlayer = player[indexPath.row].playerName
performSegue(withIdentifier: "player", sender: selectedPlayer)
}
答
您需要使用prepare
功能:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "player" {
if let player = sender as? Player {
let secondViewController = segue.destination as! SecondViewController
secondViewController.player = player
}
}
}
当你调用performSegue
这个函数会被调用。在您的secondViewController
中声明播放器变量,您只需在prepare
函数中传递该变量。
而在你didSelectRowAt
变化:
let selectedPlayer = player[indexPath.row].playerName
要:
let selectedPlayer = player[indexPath.row]
所以你传递整个Player
对象,而不仅仅是playerName
。
这可能有助于包括在问题中发布的'didSelectRowAt'方法中所需的更改。 – rmaddy
@rmaddy,错过了OP刚刚通过'playerName',更新了帖子。感谢提示。 –