如何在两个视图控制器之间发送结构数组?

时间:2019-01-09 20:57:23

标签: swift xcode

我试图在点击“ rankingButton”后在两个VC之间发送Struct数组“ ranking”。我不知道要在第二个vc中编写什么代码来获取和操作数组。

第一个VC:

struct TopPoint{
   let user: String
   let points: Int
   var position: Int
} 

var ranking: [TopPoint] = []

override func viewDidLoad() {
    super.viewDidLoad()
    let user1 = TopPoint(user: "fran", points: 1324, position: 1)
    ranking.append(user1)
}

@IBAction func rankingButton(_ sender: Any) {
    let vc = TopUserTableViewController(nibName:    "TopUserTableViewController", bundle: nil)
    vc.ranking = ranking
    navigationController?.pushViewController(vc, animated: true)
}

第二个VC:

class TopUserTableViewController: UITableViewController {

    var ranking = [TopPoint]()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    //what to code to get the array?

}

2 个答案:

答案 0 :(得分:0)

一旦按下secondVC,就可以直接访问secondVC中的阵列。因为您在ranking中将其ranking属性设置为等于firstVC,所以请考虑使用一种方法遍历数组元素并打印数组中每个struct元素的用户。您可以通过以下方式实现:

class TopUserTableViewController: UITableViewController {

    var ranking: [TopPoint]!

    override func viewDidLoad() {
        super.viewDidLoad()
        iterateElements()
    }

    func iterateElements() {
        ranking.forEach { (element) in 
            print(element.user)
        }
    }

}

您还可以直接在viewDidLoad内部访问,我添加了iterateElements方法作为参考,在viewDidLoad中直接访问为:

    override func viewDidLoad() {
        super.viewDidLoad()
        ranking.forEach { (element) in 
            print(element.user)
        }
    }

答案 1 :(得分:0)

viewDidLoad()在生命周期中为时过早。只需移动您的代码即可:

   func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        ranking.forEach { (element) in print(element.user) } }
    }