SwiftUI中Firebase存数据后NavigationLink跳转异常返回问题
问题原因及修复方案
核心问题
你的视图没有被**NavigationStack(iOS 16+)或NavigationView(iOS 15及以下)**包裹,导致NavigationLink无法正常维护导航栈状态,跳转后会自动返回原视图。
修复后的代码
import SwiftUI import Firebase import FirebaseDatabase struct SomeView: View { private let randomText = ["hello", "world"] @State private var showNextView = false private let ref: DatabaseReference! init() { ref = Database.database().reference() } var body: some View { NavigationStack { // iOS 16+ 使用该容器,iOS 15及以下替换为NavigationView ZStack { NavigationLink("", destination: NextView(), isActive: $showNextView) .hidden() Button { save() showNextView = true } label: { Text("Save") } } } } func save() { guard let uid = Auth.auth().currentUser?.uid else { print("用户未登录") return } ref.child("users/\(uid)/someName").setValue(randomText) } } struct NextView: View { var body: some View { ZStack { Text("This is the next view") } .navigationTitle("Next View") } }
额外优化点
- 遵循Swift命名规范,结构体名首字母大写
- 对
Auth.auth().currentUser增加空值判断,避免强制解包崩溃 - 将无需修改的变量设为
let,提升代码安全性 - 直接设置
showNextView = true替代toggle,逻辑更明确 - 给NavigationLink添加
.hidden(),隐藏默认的文本链接样式
内容的提问来源于stack exchange,提问作者James Taga
相关产品推荐
相关产品推荐

