为什么状态会变回原来的状态?

问题描述 投票:0回答:1

我是 SwiftUI 新手,我不明白为什么

selectedUser
在 fullScreenCover 块上设置为 nil。请注意,User 是来自第三方库的类,不符合
ObservableObject

struct Users: View {
    
    @State private var isUserSelected = false
    @State private var shouldPresentCallScreen = false
    @State private var selectedUser: User? = nil {
        didSet {
            isUserSelected = selectedUser != nil
            
            shouldPresentCallScreen = isUserSelected
        }
    }
    
    var body: some View {
        UserListView(
           onUserSelected: { user in
               //user is not nil here. 
               selectedUser = user
           }
        )
        .fullScreenCover(isPresented: $shouldPresentCallScreen) {
            //shouldPresentCallScreen is false and
            //selectedUser is null here.
            UserDetail(user: selectedUser)
        }
    }
}

编辑: 当我最初将 selectedUser 设置为非零值时,它按预期工作。但我还是不明白为什么。

selectedUser: User? = User(.....)

swiftui swiftui-state
1个回答
0
投票

原因是您没有在正文中的任何位置调用 selectedUser getter,因此它认为您不关心更新的值。它认为这是因为事实来源设计错误,很酷,你修复了它,item:是一个不错的选择。

最好有一个事实状态来源,并将其用于选择和呈现,即删除多余的布尔值。例如。

fullScreenCover(item: , content:)

© www.soinside.com 2019 - 2024. All rights reserved.