首页 > 其他分享 >swiftUI- @Observable的使用

swiftUI- @Observable的使用

时间:2024-08-25 09:05:28浏览次数:8  
标签:Observable LandmarkStore landmarks swiftUI 使用 var SwiftUI store

@Observable 是 Swift 语言中的一个属性包装器(property wrapper),用于将类的属性标记为可观察的。这意味着当这些属性的值发生变化时,依赖这些属性的视图或其他对象会自动更新。@Observable 通常用于 SwiftUI 和 Combine 框架中,以实现响应式编程。

然而,值得注意的是,@Observable 并不是 Swift 标准库的一部分,而是 SwiftUI 和 Combine 框架中的概念。在 SwiftUI 中,类似的功能通常通过 @StateObject@ObservedObject@EnvironmentObject 来实现。

以下是一个使用 @ObservedObject 的示例,展示了如何在 SwiftUI 中实现可观察的对象:

import SwiftUI
import Combine

// 定义一个可观察的类
class LandmarkStore: ObservableObject {
    @Published var landmarks: [String] = ["Statue of Liberty", "Eiffel Tower", "Great Wall of China", "Taj Mahal"]
}

struct ContentView: View {
    @State private var searchText = ""
    @ObservedObject var store = LandmarkStore()
    
    var filteredLandmarks: [String] {
        if searchText.isEmpty {
            return store.landmarks
        } else {
            return store.landmarks.filter { $0.contains(searchText) }
        }
    }

    var body: some View {
        VStack {
            TextField("Search", text: $searchText)
                .padding()
                .textFieldStyle(RoundedBorderTextFieldStyle())
            
            List {
                ForEach(filteredLandmarks, id: \.self) { landmark in
                    Text(landmark)
                }
            }
            .animation(.default, value: filteredLandmarks)
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

在这个示例中:

  1. class LandmarkStore: ObservableObject:定义了一个可观察的类 LandmarkStore,它遵循 ObservableObject 协议。

  2. @Published var landmarks: [String]:使用 @Published 属性包装器将 landmarks 属性标记为可观察的。当 landmarks的值发生变化时,依赖它的视图会自动更新。

  3. @ObservedObject var store = LandmarkStore():在 ContentView 中,使用 @ObservedObject 属性包装器来观察 LandmarkStore 实例。当 store.landmarks 发生变化时,视图会自动更新。

通过这种方式,你可以在 SwiftUI 中实现响应式编程,使视图能够自动响应数据的变化。

标签:Observable,LandmarkStore,landmarks,swiftUI,使用,var,SwiftUI,store
From: https://www.cnblogs.com/Aliancn/p/18378649

相关文章

  • swiftUI-@Environment的作用
    @Environment是SwiftUI中的一个属性包装器,用于从环境中读取共享的数据。环境(Environment)是一个全局的、可以在视图层次结构中传递的值集合。通过使用@Environment,你可以在视图中访问这些共享的环境值,而不需要显式地传递它们。@Environment的常见用途包括访问系统提供的环境......
  • swiftUI-extension的使用
    在Swift中,extension关键字用于为现有的类、结构体、枚举或协议添加新的功能,而无需修改原始源代码。扩展可以添加新的方法、计算属性、初始化器、下标、嵌套类型和遵循协议等。以下是一些常见的extension用法示例:为类添加方法extensionString{funcreversedString()......
  • swiftUI-@Bindable和@Binging的作用
    在SwiftUI中,@Bindable和@Binding是用于管理和传递数据的属性包装器。它们在SwiftUI的数据流和状态管理中起着重要作用。@Binding@Binding是一个属性包装器,用于在父视图和子视图之间共享数据。它允许子视图读取和写入父视图的状态,而不需要直接持有该状态的所有权。@Bindi......
  • 2024玩儿转TikTok之环境介绍及独立使用住宅ip搭建,最便宜的网络,20元/月,刚刚更新最新教
    郑重申明:本文章只对合法合理做tiktok视频运营的用户做学习交流使用,有其他使用不当的违规违法行为后果自负!网络的环境测试,必须是独立住宅ip,网络环境优良,tiktok发布作品才能有流量1、选择服务器我选择的服务器:https://ipraft.com/?i71b7cf​​​然后下载FinalShell连接......
  • 使用IDEA反编译.class文件
    反编译.class文件是字节码文件,人看不懂,我们要使用IDEA反编译.class文件在项目结构中找到项目输出路径复制后在文件资源管理器中打开结构与项目结构一致,一直向下找到某一个包的.class文件打开后发现是乱码打开项目所在的文件夹,在文件资源管理器中把.class文件复制......
  • 8.23 PTA实验5-8 使用函数求圆台体积
    实验5-8使用函数求圆台体积本题要求实现函数求圆台体积,定义并调用函数volume_tc(r_lower,r_upper,h)计算下底半径为r_lower、上底半径为r_upper、高度为h的圆台的体积,函数类型是double。函数接口定义:doublevolume_tc(doubler_lower,doubler_upper,doubleh);其中r_......
  • 深度解析:为何顶尖SEO专家偏爱使用代理技术?
    在当今这个数字化时代,搜索引擎优化(SEO)已成为企业和电商从业者在网站获取自然流量、提升品牌知名度和促进业务增长的关键策略之一。然而,随着搜索引擎算法的不断升级和市场竞争的日益激烈,传统的SEO手段已难以满足现代改善SEO需求。在此背景下,利用代理技术优化网站排名成为了一种......
  • R 语言学习教程,从入门到精通,R MySQL 连接使用(21)
    1、RMySQL连接MySQL是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem:关系数据库管理系统)应用软件之一。R语言读写MySQL文件需要安装扩展包,我们可以在R到控制台输入以下命令来安装:install.packages("......
  • Tushare金融数据接口使用介绍【学生可以免费获取高级数据接口哦】
    Tushare是一个面向数据分析师和量化投资者的免费、开源Python财经数据接口包,它提供了丰富的中国股市历史数据和实时数据,包括股票、基金、期货、指数和行业数据等。用户可以通过Tushare获取股票交易数据、实时数据以及公司基本信息等。Tushare的使用相对简单,首先需要在Tushare官......
  • 使用 LangGraph 构建工作流, 实现与虚拟女友对话
    文章目录简介背景流程图代码实现简介介绍了如何使用LangGraph搭建一个基于聊天机器人的工作流,具体实现了一个虚拟女友的角色扮演游戏。通过流程图展示了构建完成的状态图,并介绍了各个节点的功能,如接收用户输入、生成对话等。提供了是否使用历史聊天记录的方法,让......