在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

+0

这可能有助于包括在问题中发布的'didSelectRowAt'方法中所需的更改。 – rmaddy

+0

@rmaddy,错过了OP刚刚通过'playerName',更新了帖子。感谢提示。 –