Ios SwiftUI:工作表无法在第一次显示正确的值

Ios SwiftUI:工作表无法在第一次显示正确的值,ios,list,swiftui,Ios,List,Swiftui,我在SwiftUI中发现了奇怪的行为 当我第一次点击列表列时,工作表显示空文本。 第二次之后似乎是正确的 你能帮我吗 import SwiftUI let fruits: [String] = [ "Apple", "Banana", "Orange", ] struct ContentView: View { @State var isShowintSheet = false @State

我在SwiftUI中发现了奇怪的行为

当我第一次点击列表列时,工作表显示空文本。 第二次之后似乎是正确的

你能帮我吗

import SwiftUI

let fruits: [String] = [
    "Apple",
    "Banana",
    "Orange",
]

struct ContentView: View {
    @State var isShowintSheet = false
    @State var selected: String = ""
    var body: some View {
        NavigationView {
            List(fruits, id: \.self) { fruit in
                Button(action: {
                    selected = fruit
                    isShowintSheet = true
                }) {
                    Text(fruit)
                }
            }
        }
        .sheet(isPresented: $isShowintSheet, content: {
            Text(selected)
        })
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

改用
.sheet(项目:)
。这是固定代码

使用Xcode 12.1/iOS 14.1进行验证

struct ContentView: View {
    @State var selected: String?
    var body: some View {
        NavigationView {
            List(fruits, id: \.self) { fruit in
                Button(action: {
                    selected = fruit
                }) {
                    Text(fruit)
                }
            }
        }
        .sheet(item: $selected, content: { item in
            Text(item)
        })
    }
}

extension String: Identifiable {
    public var id: String { self }
}
谢谢你,奥米德

我使用@State更改了Asperi的代码,如下所示

import SwiftUI

struct Fruit: Identifiable, Hashable {
    var name: String
    var id = UUID()
}

let fruits: [Fruit] = [
    Fruit(name: "Apple"),
    Fruit(name: "Banana"),
    Fruit(name: "Orange"),
]

struct ContentView: View {
    @State var selected: Fruit?
    var body: some View {
        NavigationView {
            List(fruits, id: \.self) { fruit in
                Button(action: {
                    selected = fruit
                }) {
                    Text(fruit.name)
                }
            }
        }
        .sheet(item: $selected, content: { item in
            Text(item.name)
        })
    }
}

还有其他方法,但答案应该尽可能接近问题!我的答案最有说服力topic@Omid我不确定那是不是真的。您使用的是一个全局变量和
工作表(isPresented:content:)
,这在本例中是错误的(我个人不接受您的答案)。Asperi的解决方案
表(项目:内容:)
是正确的。但omusubi创建
水果
结构的解决方案甚至更好(而且可能是公认的解决方案)。