MST

星途 面试题库

面试题:Swift中如何在SwiftUI的TabView里切换不同页面并传递数据

在SwiftUI的TabView场景下,假设存在两个Tab页面,第一个页面是用户信息展示页,第二个页面是用户设置页。当在设置页修改了用户的昵称后,如何将新昵称传递到用户信息展示页并实时更新显示。请描述实现思路并给出关键代码示例。
26.3万 热度难度
编程语言Swift

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 使用状态管理:利用@State@ObservedObject@EnvironmentObject等状态管理机制来存储用户昵称。这样在设置页修改昵称时,其他依赖该状态的视图(用户信息展示页)能实时感知变化。
  2. 传递数据:通过Binding将状态传递给需要的视图,使得设置页对昵称的修改能同步到展示页。

关键代码示例

import SwiftUI

// 定义一个数据模型来存储用户信息
class User: ObservableObject {
    @Published var nickname: String
    
    init(nickname: String) {
        self.nickname = nickname
    }
}

struct ContentView: View {
    @StateObject var user = User(nickname: "初始昵称")
    
    var body: some View {
        TabView {
            UserInfoView(user: user)
               .tabItem {
                    Label("用户信息", systemImage: "person")
                }
            UserSettingsView(user: $user)
               .tabItem {
                    Label("用户设置", systemImage: "gear")
                }
        }
    }
}

struct UserInfoView: View {
    @ObservedObject var user: User
    
    var body: some View {
        VStack {
            Text("昵称: \(user.nickname)")
        }
    }
}

struct UserSettingsView: View {
    @Binding var user: User
    
    var body: some View {
        VStack {
            TextField("请输入昵称", text: $user.nickname)
        }
    }
}