【问题标题】:Assign api json results to SwiftUI Picker将 api json 结果分配给 SwiftUI Picker
【发布时间】:2021-05-04 13:13:18
【问题描述】:

我有这些结构:

 struct Problems: Codable {
    var id: Int
    var type: String
}

这个状态:

@State private var issues = [Problems]()

我像这样从 api 获取结果:

let decoded = try JSONDecoder().decode([Problems].self, from: data)
                            self.issues = decoded
                            print(decoded)

然后打印出来:

Premier_Service.AddTaskView.Problems(id: 2, type: "Door"), 
Premier_Service.AddTaskView.Problems(id: 3, type: "Water"),
 Premier_Service.AddTaskView.Problems(id: 4, type: "Elevator"),

我想将问题分配给选择器,但在尝试了许多其他代码后我不知道如何

【问题讨论】:

    标签: swift swiftui picker


    【解决方案1】:

    这是一个工作示例...我创建了一些虚拟数据。

    创建另一个 State 变量,它保存您选择的值,然后将所有其他 Problems 对象传递给 Picker。

    struct Problems: Codable, Hashable {
        var id: Int
        var type: String
    }
    
    struct ContentView: View {
        @State private var issues = [Problems(id: 0, type: "Big Problem"), Problems(id: 1, type: "World Problem")]
        @State var selectedIssue: Problems? = nil
        var body: some View {
            Picker("Choose", selection: $selectedIssue, content: {
                ForEach(issues, id:\.self) { problem in
                    Text(problem.type).tag(problem as Problems?)
                }
            })
            .onAppear(perform: {
                selectedIssue = issues.first
            })
        }
    }
    

    【讨论】:

    • 但是如果我想获得选定的选择器值怎么办?
    • 选中的picker值存储在selectedIssue变量中
    • 你能在你的代码中检查它吗?因为它不适用于我: Button(action: { print(selectedIssue ?? "no selection") }, label: { Text("Print Selected") })
    • 你是对的!这是由于输入错误。我修正我的答案。您必须在 Foreach 中添加 .tag() 或将选择的状态设为非可选。选择和状态必须是相同的类型
    猜你喜欢
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    相关资源
    最近更新 更多