在SwiftUI中填充列表

在SwiftUI中填充列表,swift,swiftui,swiftui-list,Swift,Swiftui,Swiftui List,通过在线教程学习Swift和自学的初学者。所以我创建列表视图,列表视图的数据(数组)保存在一个单独的Swift文件中 在下面的代码中,从数组导入数据,并使用列表语法和闭包填充列表。我的问题是Swift CLOSE如何帮助填充这些数据,一步一步的解释可能会有所帮助。随着课程的深入,我面临着一个理解上的挑战 import SwiftUI struct ContentView: View { let hikes = Hike.all() //all the data kept in se

通过在线教程学习Swift和自学的初学者。所以我创建列表视图,列表视图的数据(数组)保存在一个单独的Swift文件中

在下面的代码中,从数组导入数据,并使用列表语法和闭包填充列表。我的问题是Swift CLOSE如何帮助填充这些数据,一步一步的解释可能会有所帮助。随着课程的深入,我面临着一个理解上的挑战

import SwiftUI

struct ContentView: View {

    let hikes = Hike.all()  //all the data kept in separate Swift file

    var body: some View {
        List(self.hikes, id: \.name) { hike in  //how does closure help here?  
            Text(hike.name)
        }
    }
}

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

这是一个相当抽象的解释

什么是
列表

列表
是一个可以表示您的模型列表的视图(在本例中,
self.hikes
。但是我没有看到在任何地方声明这个,您是指
self.imgs
?)。每个模型都表示为
列表的“子视图”

什么是结束?

闭包实际上只是一个函数。它可以接受任意数量的参数,还可以选择返回一个值

那么为什么在这里使用闭包呢?

列表
实际上不知道如何将每个模型表示为
视图
,因此它需要询问您。它通过一个闭包来实现这一点,闭包将您的一个模型作为参数,并返回一个
视图
。这样,每当
列表
想要问“我应该如何表示此模型?”的问题时,它就可以调用闭包,并将得到一个
视图

在您的例子中,您说过要表示您的一个模型
hike
列表
应该使用
文本
视图和字符串
hike.name

换句话说,这里传递的闭包表示模型和显示模型的视图之间的映射

注意:这里使用的闭包实际上是一种特殊类型的闭包,称为函数生成器。如果您感兴趣,请阅读更多

根据您的评论:

在打印所有值之前,变量是否像“For in”循环一样循环


嗯,它不一定像for-in循环那样工作。这实际上取决于
List
的实现。“何时调用闭包?”的答案是“当
列表
需要一个视图时”。

对数组中用作列表第一个参数的每个元素调用闭包一次,这与
映射
过滤
等函数类似(如果有帮助的话)。我不知道你希望得到什么样的解释。谢谢。变量是否会像“For in”循环一样循环,直到所有的值都打印出来?这是一个非常清楚的解释。非常感谢你。