如何通过Segue传递JSON数组至另一个ViewController并在不同Label显示
解决JSON字典传递到目标ViewController并显示到Label的问题
你当前的核心问题是类型不匹配:你传递的是[String: AnyObject]类型的字典,但在prepare(for:sender:)里错误地尝试将其转换为[String]数组,这就导致类型转换失败,后续代码无法执行。下面是完整的修正方案:
步骤1:修正源ViewController的prepare(for:sender:)方法
首先确保你在跳转时传递的字典能被正确识别,修改后的代码如下:
var sendData = [String: AnyObject]() sendData = datas print("Send Data : \(sendData)") DispatchQueue.main.async { self.performSegue(withIdentifier: "checkLoginViewController", sender: sendData) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // 先校验segue标识,避免和其他跳转逻辑冲突 guard segue.identifier == "checkLoginViewController", let destinationVC = segue.destination as? signUpViewController, let sendmyDict = sender as? [String: AnyObject] else { return } // 将字典传递给目标ViewController的属性 destinationVC.receivedData = sendmyDict }
步骤2:在目标ViewController中定义接收属性并赋值给Label
在signUpViewController里先定义一个用于接收数据的属性,然后在viewDidLoad中将字典里的内容解析到对应的Label上:
// 定义接收字典的属性(可选类型,避免未传递数据时崩溃) var receivedData: [String: AnyObject]? override func viewDidLoad() { super.viewDidLoad() // 安全解包接收的数据 guard let data = receivedData else { print("未接收到数据") return } // 示例:将字典中的值赋值给对应的Label // 假设你有nameLabel、ageLabel、emailLabel三个Label if let userName = data["name"] as? String { nameLabel.text = userName } if let userAge = data["age"] as? Int { ageLabel.text = "年龄:\(userAge)" } if let userEmail = data["email"] as? String { emailLabel.text = userEmail } // 根据你实际的JSON字段和Label需求,继续添加对应的解析逻辑 }
额外说明
如果你的datas其实是数组类型(比如[[String: AnyObject]],即多个字典的集合),只需要调整以下几点:
- 源VC中
sendData的类型改为[[String: AnyObject]] prepare方法中转换类型为[[String: AnyObject]]- 目标VC的接收属性改为
var receivedData: [[String: AnyObject]]?,然后根据数组索引或遍历的方式取数据赋值给Label
内容的提问来源于stack exchange,提问作者Sandesh Zote
相关产品推荐
相关产品推荐

