簡體   English   中英

為什么視圖之間的值會發生變化? SwiftUi

[英]Why does the value change between views? SwiftUi

我正在創建一個應用程序,其中有一個用戶列表,每個用戶都有一個關聯的按鈕,可以通向另一個屏幕。 此屏幕應顯示所選用戶的所有數據。

struct UserList: View {
    @StateObject var administratorManager = AdministratorManager() 

    @State var ricerca = ""
    
    @State var isPresented: Bool = false
    
    var body: some View {

        ScrollView(.vertical, showsIndicators: false) {
            ForEach(administratorManager.users.sorted(using: [
                KeyPathComparator(\.surname, order: .forward)
                ])) { user in

                if user.toCheck.contains(where: {$0.range(of: ricerca.lowercased()) != nil}) || user.toCheck.contains(where: {$0.range(of: ricerca.capitalized) != nil}) || ricerca.isEmpty {

                    VStack(alignment: .leading) {
                        Text(user.number).font(.subheadline)
                        Text(user.name).font(.subheadline) 
                        Text(user.surname).font(.subheadline) 
                    }.background(Color("Purple"))
                        .cornerRadius(5)

                    // Button to change screen ---------------------------------------------------------------------------------------------------
                    Button {
                        isPresented.toggle()
                        administratorManager.infoUtente[2] = user.number
                    } label: {
                        Text("Tap me!")
                            .padding()
                            .background(Color.white)
                            .cornerRadius(20)
                    }.padding(1)
                    // ---------------------------------------------------------------------------------------------------------------------------
                }
            }.navigationBarTitle("User List") 
                .searchable(text: $ricerca, prompt: "Search")
                .onAppear() {
                    administratorManager.fetchData(collection: "Users") 
                    administratorManager.checkPermission() 
                }
                .alert(isPresented: $administratorManager.isMessage) {
                    Alert(title: Text(administratorManager.title), message: Text(administratorManager.message),
                          dismissButton: .default(Text("Ho capito!"))) 
                }
                .sheetWithDetents(
                    isPresented: $isPresented,
                    detents: [.medium(),.large()]
                ) {
                    print("The sheet has been dismissed")
                } content: {
                    Group {
                        userInfo()
                    }
                    .font(.title)
                }
        }
        
    }
}

這是顯示用戶信息的屏幕:

struct userInfo: View {
    
    // Oggetti.
    @StateObject var administratorManager = AdministratorManager() // Oggetto riguardante i comandi riservati agli admin.
    
    var body: some View {
        
        HStack {
            Text("Nome: \(administratorManager.infoUtente[0])")
                .padding(.horizontal, 5)
            
            Text("Cogome: \(administratorManager.infoUtente[1])")
                .padding(.horizontal, 5)
        }.padding(1)
        
        Text("Numero: \(administratorManager.infoUtente[2])")
            .padding(.horizontal, 5)
            
        Button("print", action: {
            print(administratorManager.infoUtente[2])
        }).padding(1)
        
        
    }
    
}

如果我在控制台中打印,administratorManager.infoUser [2] 的值為空。

我最近一直在使用 Swift,但我還沒有找到任何可以解決的問題。 我該如何解決?

您有兩個不同的AdministratorManager實例。 一個在UserList中,第二個在userInfo中。 它們沒有連接並且具有不同的數據。

userInfo中更改為這個

@EnvironmentObject var administratorManager: AdministratorManager

並在UserList傳遞環境 object 到下一個屏幕

Group {   
  userInfo()  
  .environmentObject(administratorManager)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM