在SwiftUI中填充列表

时间:2019-12-22 11:07:50

标签: swift swiftui swiftui-list

相当多的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()
    }
}

1 个答案:

答案 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需要查看时”。