我是 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(.....)
原因是您没有在正文中的任何位置调用 selectedUser getter,因此它认为您不关心更新的值。它认为这是因为事实来源设计错误,很酷,你修复了它,item:是一个不错的选择。
最好有一个事实状态来源,并将其用于选择和呈现,即删除多余的布尔值。例如。
fullScreenCover(item: , content:)