SwiftUI 初体验 3 用户交互 / 数据&视图绑定

本文介绍了在SwiftUI中处理用户交互事件的方法,包括利用@State标注实现视图状态更新,通过ForEach包裹List处理多组数据,以及如何使用Published注解实现数据绑定。同时,文章提到了在导航栏添加开关按钮并关联State属性,以及在详情页面如何通过EnvironmentObject进行数据同步。通过这些机制,SwiftUI实现了类似rxSwift的响应式编程效果,但更加简洁。最后,作者对SwiftUI的未来前景表达了乐观态度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于上一篇,简单处理一下在SwiftUI的用户交互事件。
修改List页面,增加收藏标记的属性,增加@State标注,这个标注Xcode的文档注释这样描述:

A linked View property that instantiates a persistent state
value of type Value, 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 {
   
                        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值