Segue传递旧数据求助:为何无法传递API获取的新idForPlace值?
问题原因及解决办法
核心问题:局部变量覆盖了成员变量
你在mapView(_:didTap:)方法里重新声明了一个局部的idForPlace:
var idForPlace = (data?["id"])!
这个变量和类顶部的成员变量var idForPlace = "test"是完全独立的两个变量——你修改的只是局部变量,类的成员变量根本没被更新,所以prepare(for:sender:)里拿到的始终是初始值"test"。
解决步骤
修正变量赋值逻辑
去掉局部变量的var声明,直接给类的成员变量赋值:// 移除var,通过self明确访问成员变量 self.idForPlace = (data?["id"])!这样成员变量就会被更新为从marker的userData里拿到的新值,segue传递时就能获取到正确数据。
可选优化:避免依赖成员变量
你也可以不用成员变量,直接把目标ID通过sender传递给prepare(for:sender:),逻辑更清晰:// 在Firebase回调里传递placeId作为sender if let data = marker.userData as? [String:String], let placeId = data["id"] { let ref = Database.database().reference() ref.child("placeID/\(placeId)").observeSingleEvent(of: .value, with: { (snapshot) in self.performSegue(withIdentifier: "Fenster1", sender: placeId) }) }然后修改
prepare方法:override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "Fenster1", let destinationVC = segue.destination as? ViewComments, let placeId = sender as? String { destinationVC.idForPlace = placeId } }额外提示:避免强制解包
不要用!强制解包data?["id"],建议用可选绑定避免崩溃:if let data = marker.userData as? [String:String], let placeId = data["id"] { // 后续逻辑 } else { print("Marker的userData格式错误或缺少id字段") return }
内容的提问来源于stack exchange,提问作者submariner
相关产品推荐
相关产品推荐

