SwiftUI Picker 填充问题 - 选择器中的 ForEach 循环不填充

Posted

技术标签:

【中文标题】SwiftUI Picker 填充问题 - 选择器中的 ForEach 循环不填充【英文标题】:SwiftUI Picker population problem - ForEach Loop in picker does not populate 【发布时间】:2019-11-26 23:11:05 【问题描述】:

我有 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
       

   ]

【问题讨论】:

【参考方案1】:

你可以试试这个,它适用于我的 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) ;
                
            

【讨论】:

感谢您的澄清。似乎我需要将整个内容包含在一个 FORM 中才能正常工作。这似乎也解决了我的问题。

以上是关于SwiftUI Picker 填充问题 - 选择器中的 ForEach 循环不填充的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 和 Picker 和 FireStore 返回文档 ID 不下降

未显示来自 JSON 的 SwiftUI Picker 数据

SwiftUI Picker 多个错误,核心数据,布局

SwiftUI:添加元素时选择器内容未刷新

SwiftUI实战之多组选择器Picker(2020教程)

SwiftUI 中的选择器选择和翻译冲突