You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:36:18