相当多的Swift初学者,可以通过在线教程进行自学。所以我正在创建列表视图,列表视图的数据(数组)保存在单独的Swift文件中。
在下面的代码中,导入了数组中的数据,并使用List语法和Closure填充了List。我的问题是Swift Closure如何帮助填充此数据,也许一步一步的解释会有所帮助。随着课程的深入,我面临着理解上的挑战。
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()
}
}
答案 0 :(得分:2)
这是一个相当抽象的解释。
什么是List
?
List
是一个可以表示您的模型列表的视图(在这种情况下为self.hikes
。我在任何地方都看不到此声明,您是说self.imgs
吗? )。您的每个模型都表示为List
的“子视图”。
什么是闭包?
闭包实际上只是一个函数。它可以接受任意数量的参数,并可以选择返回一个值。
那为什么在这里使用闭包?
List
实际上不知道如何将每个模型表示为View
,因此它需要询问 you 。它使用闭包来完成此操作,该闭包将您的模型之一作为参数,并返回View
。这样一来,只要List
想要问“我应该如何表示这个模型?”这个问题,它就可以调用闭包,并且会得到一个View
。
在您的情况下,您曾说过hike
代表一个模型List
,应使用带有字符串Text
的{{1}}视图。
换句话说,您在此处传递的闭包表示模型与显示模型的视图之间的映射。
注意:这里使用的闭包实际上是一种特殊的闭包类型,称为函数构建器。如果您有兴趣,请进一步阅读here。
根据您的评论:
像“ For-In”循环一样执行变量加息循环,直到所有值都打印出来
好吧,它不一定像for-in循环那样工作。实际上,这完全取决于hike.name
的实现。答案为“何时将调用闭包?”是“ List
需要查看时”。