Swiftui 为什么赋值后状态重置为零

Swiftui 为什么赋值后状态重置为零,swiftui,Swiftui,在一个简单的SwiftUI应用程序中,我尝试在单击列表中的一行时显示一张工作表。当工作表打开时,已为单击的列表对象指定状态变量。请参阅下面的代码 由于未知原因,当图纸打开时,状态变量为nil 我是否误解了SwiftUI,或者忘记了一些关于状态变量的内容。我希望有人能启发我 import SwiftUI struct ContentView: View { class Object: Identifiable { let id: String

在一个简单的SwiftUI应用程序中,我尝试在单击列表中的一行时显示一张工作表。当工作表打开时,已为单击的列表对象指定状态变量。请参阅下面的代码

由于未知原因,当图纸打开时,状态变量为nil

我是否误解了SwiftUI,或者忘记了一些关于状态变量的内容。我希望有人能启发我


import SwiftUI

struct ContentView: View {
    
    class Object: Identifiable {
        let id: String
        init(_ id: String) { self.id = id }
    }
    
    let collection = [Object("1"),Object("2"),Object("3")]
    
    @State var show = false
    @State var state: Object?
    
    var body: some View {
        
        List(collection) { item in
            
            HStack{ Text(item.id); Spacer() }
                .background(Color.white)
                .onTapGesture(count:1, perform: {
                    self.state = item
                    show.toggle()
            })
        }
        .sheet(isPresented:$show) {
            if state == nil {
                Text("Error state == nil ?")
            }
            else {
                Text(state!.id)
            }
        }
    }
}


问题是由于在单击按钮之前创建了图纸。您的方案的解决方案是使用
.sheet(项目:
方法

下面是更正的代码。使用Xcode 12.1/iOS 14.1进行测试

struct ContentView: View {
    
    class Object: Identifiable {
        let id: String
        init(_ id: String) { self.id = id }
    }
    
    let collection = [Object("1"),Object("2"),Object("3")]
    
    @State var state: Object?
    
    var body: some View {
        
        List(collection) { item in
            
            HStack{ Text(item.id); Spacer() }
                .background(Color.white)
                .onTapGesture(count:1, perform: {
                    self.state = item
            })
        }
        .sheet(item: $state) { item in
                 Text(item.id)
        }
    }
}
您是否尝试在“结构对象”中更改缩进的“类对象”?