SwiftUI的List View和UIKit中的UITableView很相似,它可以根据你的需求加载静态或者动态数据。不同的是,List使用起来更加的简单:我们不需要在storyboard或者Xib中创建cell,也不需要使用代码注册cell,不需要告诉它要有多少行内容,当然也不需要dequeue cell以及手动设置cell等等。
一、创建一个静态数据列表
想要创建一个静态数据列表,你首先需要确定每一个cell的样式。我们可以自定义一个简单的cell,代码如下:
struct StreetRow: View {
var name: String
var body: some View {
Text("The street name is \(name)")
}
}
这样我们就定义了一个简单的cell,cell上只有一行文字,现在可以创建一个List View,并添加你需要的数量的cell,像这样:
struct ListViewDemo: View {
var body: some View {
List{
//当然可以有多种不同的Row哦
StreetRow(name: "The Lodon Street")
StreetRow(name: "The Joe's Street")
StreetRow(name: "The House Street")
}
}
}
这样就创建了一个最简单的列表,这里不得不说swiftUI确实是强大,短短几行代码就可以创建出UITableView需要书写大量代码才能看到的效果。
二、创建一个动态数据列表
如果想动态的生成items,比如根据接口返回的数据生成列表,就需要用到动态列表。按照UIKit中的习惯,首先我们需要一个model存储这些数据,SwiftUI也类似,我们需要创建一个Street的结构体,并遵循Identifiable协议,此协议中只有一个必须的属性:id,它用来让SwiftUI区分不同的item。
struct Street: Identifiable {
var id = UUID()
var name: String
}
这里我们给id初始化为UUID():
UUID: which can be used to uniquely identify types, interfaces, and other items.
UUID可以被用来作为不同item的标记,这样swiftUI就知道当前是哪个
接下来需要修改StreetRow的内容:
struct StreetRow: View {