首页 > 解决方案 > SwiftUI Picker 填充问题 - 选择器中的 ForEach 循环不填充

问题描述

我有 SwiftUI 和 XCode 11.2.1 环境。

在以下代码中,ForEach 循环显示标题,列表也显示,它的工作原理:

struct Todo: Codable, Identifiable {
    let userId, id: Int
    let title: String
    let completed: Bool

    enum CodingKeys: CodingKey {
        case userId, id, title, completed
    }
}
// SOME STUFF HERE ...
struct ContentView: View {
// SOME STUFF HERE...
    var body: some View {

            NavigationView {
                VStack (spacing: 15){

                     Text("Number of items: \(todoData.todos.count)"

                    ForEach(self.todoData.todos) { str in Text(String(str.title));}  // works

                    List(self.todoData.todos) { todo in
                        Text(todo.title) // works
                    }

但是,下面的 ForEach 循环根本不显示 Text,我使用了 todoData.todos.count:

ForEach(0 ..< (todoData.todos.count)) {
                    Text(String(self.todoData.todos[$0].userId))
                    }

当我使用以下内容时,来到 Picker 人口:

Picker( selection: $selectedItem, label: Text("MyItems"), content:
                {
                    ForEach(self.todoData.todos) { str in Text(str.title);}
                }
                )

=-- 除了“MyItems”选择器名称和选择器列表的 2 个空行之外,什么都不显示。

任何建议/帮助将不胜感激。

=--

data is as follows:
[
    {
           "userId": 1,
           "id": 1,
           "title": "delectus aut autem",
           "completed": false
       },
       {
           "userId": 1,
           "id": 2,
           "title": "quis ut nam facilis et officia qui",
           "completed": false
       },
       {
           "userId": 1,
           "id": 3,
           "title": "quis ut nam facilis et officia qui",
           "completed": false
       },
    {
           "userId": 2,
           "id": 4,
           "title": "quis ut nam facilis et officia qui",
           "completed": false
       }

   ]

标签: iostextforeachswiftuipicker

解决方案


你可以试试这个,它适用于我的 Xcode:

@State var selectedItem: String = ""

var body: some View {

        NavigationView {
            VStack (spacing: 15){

                 Text("Number of items: \(todos.count)")

                ForEach(self.todos) { str in Text(String(str.title));}  // works

                List(self.todos) { todo in
                    Text(todo.title) // works
                }

                ForEach(0 ..< (todos.count)) {
                Text(String(self.todos[$0].userId))
                    }

                Picker(selection: self.$selectedItem, label: Text("MyItems")) {
                    ForEach(self.todos) { str in Text(str.title).tag(str.title) ;}
                }
            }}}}

推荐阅读