我试图在点击“ 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?
}
答案 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) } }
}