基于上一篇,简单处理一下在SwiftUI的用户交互事件。
修改List页面,增加收藏标记的属性,增加@State标注,这个标注Xcode的文档注释这样描述:
A linked View property that instantiates a persistent state
value of typeValue
, allowing the view to read and update its
value.
大概是用于view事件的读写用途。
把传递给List的speciesData抽出来用ForEach来warp,这样做可以让我们为List提供多个组别的数据。
条件表示只显示收藏数据,后面提供的开关控件就可以切换状态只显示收藏的内容。
struct AnimalList: View {
@State var showFavouriteOnly = false
var body: some View {
NavigationView {
List {
ForEach(speciesData) {
species in
if !self.showFavouriteOnly || species.isFavourite {
NavigationLink(destination: AnimalDetails(species: species)) {
RowView(species: species)
}
}
}
}
.navigationBarTitle(Text("Animals"))
}
}
}
我们在json文件和species实体类中也增加isFavourite属性,这里就不贴出来了。
跟上面说到的一样我们在导航上方增加一个开关按钮,并且把它的状态关联到State属性showFavouriteOnly上。(其中navigationBarItems是绑定在List上,而不是NavigationView上。)
struct AnimalList: View {
@State var showFavouriteOnly = false
var body: some View {
NavigationView {
List {
ForEach(speciesData) {
species in
if !self.showFavouriteOnly || species.isFavourite {