首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏肘子的Swift记事本

    @AppStorage研究

    随着配置信息的增加,在SwiftUI视图中使用的@AppStorage越来越多。 本文探讨的是如何优雅、高效、安全地在SwiftUI中使用@AppStorage,在不借助第三方库的情况下,解决当前@AppStorage使用中出现的痛点: 支持的数据类型少 声明繁琐 声明容易出现拼写错误 大量@AppStorage无法统一注入 @AppStorage基础指南 @AppStorage是SwiftUI框架提供的一个属性包装器,设计初衷是创建一种在视图中保存和读取UserDefaults变量的快捷方法 增加@AppStorage支持的数据类型 除了上述的类型外,@AppStorage还支持符合RawRepresentable协议且RawValue为Int或String的数据类型。 Defaults中使用的是@AppStorage的声明方式,而Configuration中使用的是AppStorage的原始构造形式。变化的目的是为了能够保证视图更新机制的正常运作。

    1.8K20编辑于 2022-07-28
  • 来自专栏鸿蒙开发笔记

    OpenHarmony应用全局的UI状态存储:AppStorage

    AppStorage将在应用运行过程保留其属性。属性通过唯一的键字符串值访问。AppStorage可以和UI组件同步,且可以在应用业务逻辑中被访问。 @StorageProp(key)是和AppStorage中key对应的属性建立单向数据同步,允许本地改变,但是对于@StorageProp,本地的修改永远不会同步回AppStorage中,相反,如果AppStorage 被装饰变量的初始值必须指定,如果AppStorage实例中不存在属性,则作为初始化默认值,并存入AppStorage中。 同步类型双向同步:从AppStorage的对应属性到自定义组件,从自定义组件到AppStorage对应属性。 因为AppStorage已经有同名属性,Environment环境变量不会再写入AppStorage中,所以建议AppStorage中属性不要使用Environment预置环境变量名。

    49810编辑于 2025-05-15
  • harmony OS NEXT-应用状态-AppStorage详细介绍

    鸿蒙Harmony-应用状态-AppStorage详细介绍1.1 概述AppStorage是在应用启动的时候会被创建的单例。 AppStorage将在应用运行过程保留其属性。属性通过唯一的键字符串值访问。AppStorage可以和UI组件同步,且可以在应用业务逻辑中被访问。 AppStorage支持应用的主线程内多个UIAbility实例间的状态共享。 AppStorage中的属性可以被双向同步,数据可以是存在于本地或远程设备上,并具有不同的功能,比如数据持久化(详见PersistentStorage)。 1.2 使用方法AppStorage 是应用全局的UI状态存储,是和应用的进程绑定的,由UI框架在应用程序启动时创建,为应用程序UI状态属性提供中央存储。

    54930编辑于 2025-03-30
  • 来自专栏酒楼

    ArkTS-AppStorage应用全局的UI状态存储

    而对于AppStorage,是应用级的全局状态共享。 AppStorage将在应用运行过程保留其属性。属性通过唯一的键字符串值访问。 AppStorage可以和UI组件同步,且可以在应用业务逻辑中被访问。 被装饰变量的初始值 必须指定,如果AppStorage实例中不存在属性,则作为初始化默认值,并存入AppStorage中。 @StorageLink @StorageLink(key)是和AppStorage中key对应的属性建立双向数据同步: 1.本地修改发生,该修改会被回AppStorage中: 2.AppStorage 因为AppStorage已经有同名属性,Envrionment环境变量不会再写入AppStorage中,所以建议AppStorage中属性不要使用Environment预置环境变量名

    1.2K10编辑于 2023-07-05
  • 鸿蒙ArkTS AppStorage数据同步失效:五大原因与高效解决策略

    引言:掌握AppStorage响应式同步的核心机制在鸿蒙ArkTS开发中,AppStorage是应用级别的状态管理工具,负责存储和同步全局数据,它与UI组件的交互依赖于装饰器机制,如@StorageProp } let user = AppStorage.get('user') as User;user.name = "张三"; // 引用地址未变,AppStorage无法感知AppStorage.set( 未同步 }}在这种情况下,组件的修改会反向更新AppStorage,但主题显示组件通常不需要修改AppStorage中的值,因此使用@StorageLink是不合适的。 2.4 原因四:跨线程操作违规 - 在非UI线程直接修改AppStorage数据AppStorage的数据更新必须在UI线程中执行。 使用AppStorage.setOrCreate确保数据一致性AppStorage.setOrCreate方法可以在组件初始化时自动创建数据,并确保默认值的处理。

    41300编辑于 2025-07-31
  • 来自专栏Harmony学习之路

    HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 七)

    概述 PersistentStorage将选定的AppStorage属性保留在设备磁盘上。应用程序通过API,以决定哪些AppStorage属性应借助PersistentStorage持久化。 UI和业务逻辑不直接访问PersistentStorage中的属性,所有属性访问都是对AppStorage的访问,AppStorage中的更改会自动同步到PersistentStorage。 应用开发通常通过AppStorage访问PersistentStorage,另外还有一些接口可以用于管理持久化属性,但是业务逻辑始终是通过AppStorage获取和设置属性的。 ,所以使用其在AppStorage找到的值47。 @StorageLink装饰的变量是和AppStorage中建立双向同步的,所以@StorageLink('aProp') aProp的变化会被同步回AppStorage中。

    55430编辑于 2023-10-15
  • 来自专栏酒楼

    ArkTS-PersistentStorage持久化存储UI状态

    概述 PersistentStorage将选定的AppStorage属性保留在设备磁盘上。应用程序通过API,以决定哪些AppStorage属性应结束PersistentStorage持久化。 UI和业务逻辑不直接访问PersistentStorage中的属性,所有属性访问都是对AppStorage的访问,AppStorage中的更改会自动同步到PersistentStorage。 应用开发通常通过AppStorage访问PersistentStorage,另外还有一些接口可以用于管理持久化属性,但是业务逻辑始终是通过AppStorage获取和设置属性的。 aProp',47); 2.在AppStorage获取对应属性: AppStorage.Get('aProp');//returns 47 ​ 或在组件内部定义: @StorageLink('aProp 中“aProp”双向绑定,在创建的过程中会在AppStorage中查找,成功找到“aProp”,所以使用其在AppStorage找到的值47.

    1.1K20编辑于 2023-07-05
  • 鸿蒙仓颉语言开发教程:仓颉语言中的状态存储

    let store1 = AppStorage.set('name', 'youlan');let store2 =  AppStorage.setOrCreate('name', 'youlan'); name = AppStorage.get<String>('name').getOrThrow()除了基础的存入和读取操作,你还可以使用link来双向绑定AppStorage中的数据,给大家演示一下: let name1 = AppStorage.link<String>("name").getOrThrow()let name2 = AppStorage.link<String>("name").getOrThrow 最后介绍Appstorage删除数据的方法,可以使用delete删除某一个字段的数据,也可以使用clear方法清除所有数据:AppStorage.delete('name')AppStorage.clear 的基础上持久化数据,所以PersistentStorage存储的内容是可以通过AppStorage来读取的,取值方法和上面一样。

    21110编辑于 2025-06-17
  • 来自专栏鸿蒙开发笔记

    OpenHarmony应用ArkUI 状态管理开发案例

    而对于AppStorage,是应用级的全局状态共享。 AppStorage使用场景和相关的装饰器:@StorageProp和@StorageLink@StorageProp@StorageProp(key)是和AppStorage中key对应的属性建立单向数据同步 ,我们允许本地改变的发生,但是对于@StorageProp,本地的修改永远不会同步回AppStorage中,相反,如果AppStorage给定key的属性发生改变,改变会被同步给@StorageProp @StorageLink@StorageLink(key)是和AppStorage中key对应的属性建立双向数据同步:1.  本地修改发生,该修改会被同步回AppStorage中;2.   AppStorage中的修改发生后,该修改会被同步到所有绑定AppStorage对应key的属性上,包括单向(@StorageProp和通过Prop创建的单向绑定变量)、双向(@StorageLink和通过

    31020编辑于 2025-05-08
  • 来自专栏Harmony学习之路

    HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 六)

    AppStorage将在应用运行过程保留其属性。属性通过唯一的键字符串值访问。 AppStorage可以和UI组件同步,且可以在应用业务逻辑中被访问。 被装饰变量的初始值 必须指定,如果AppStorage实例中不存在属性,则作为初始化默认值,并存入AppStorage中。 @StorageLink @StorageLink(key)是和AppStorage中key对应的属性建立双向数据同步: 本地修改发生,该修改会被写回AppStorage中; AppStorage中的修改发生后 同步类型 双向同步:从AppStorage的对应属性到自定义组件,从自定义组件到AppStorage对应属性。 因为AppStorage已经有同名属性,Environment环境变量不会再写入AppStorage中,所以建议AppStorage中属性不要使用Environment预置环境变量名。

    73820编辑于 2023-10-15
  • 来自专栏肘子的Swift记事本

    为 @CloudStorage 添加了类 @Published 的能力

    我重新修改了 CloudStorage 的代码,现在可以同 AppStorage 完全一样将 UserDefaults 和 NSUbiquitousKeyValueStore 汇总到一起,在 SwiftUI 下周我们将聊聊它的实现原理 —— 【如何为属性包装器添加类 Published 的能力】 class Settings:ObservableObject { @AppStorage("name ") var name = "fat" @AppStorage("age") var age = 5 @CloudStorage("readyForAction") var AppStorage 研究[3] 因为微信公众号中的文章只能修改10个字符,因此只有博客上的文章 www.fatbobman.com 才会保持更新,望见谅。 研究: https://fatbobman.com/posts/appstorage/

    78320编辑于 2022-07-28
  • 来自专栏鸿蒙开发笔记

    OpenHarmony持久化存储UI状态:PersistentStorage

    概述PersistentStorage将选定的AppStorage属性保留在设备磁盘上。应用程序通过API,以决定哪些AppStorage属性应借助PersistentStorage持久化。 UI和业务逻辑不直接访问PersistentStorage中的属性,所有属性访问都是对AppStorage的访问,AppStorage中的更改会自动同步到PersistentStorage。 应用开发通常通过AppStorage访问PersistentStorage,另外还有一些接口可以用于管理持久化属性,但是业务逻辑始终是通过AppStorage获取和设置属性的。 ”,所以使用其在AppStorage找到的值47。 AppStorage.setOrCreate('aProp', 47):属性“aProp”在AppStorage中创建,其类型为number,其值设置为指定的默认值47。'

    29410编辑于 2025-05-16
  • 来自专栏酒楼

    ArkTS-Environment设备环境查询

    它为AppStorage提供了一系列描述应用程序运行状态的属性。 Environment是所有属性都是不可变的(即应用不可写入),所有的属性都是简单类型。 使用场景 从UI中访问Environment参数 使用Environment.EnvProp将设备运行的环境变量存入AppStorage中: //将设备的语言code存入AppStorage,默认值为en //后续设备的预览设置切换,都将同步到AppStorage中 Environment.EnvProp('languageCode','en'); 可以使用@StorageProp链接到Component //将设备languageCode存入AppStorage中 Environment.EnvProp('languageCode','en'); let enable = AppStorage.Get( <string> = AppStorage.Prop('languageCode'); if(lang.get() === 'zh'){ console.info('你好'); }else{

    49810编辑于 2023-07-05
  • HarmonyOS NEXT 实战系列07-应用状态

    应用状态-AppStorageAppStorage 是应用全局的UI状态存储,不同于 @State 等装饰器仅能在组件树上传递,AppStorage的目的是为了给开发者提供更大范围的跨 Ability User>('user', { name: 'jack', age: 18 })获取全局UI状态 get<T>(propName: string): T | undefinedconst user = AppStorage.get 应用状态-持久化PersistentStorage 提供状态变量持久化的能力,但是需要注意,其持久化和读回UI的能力都需要依赖AppStorage。 PersistentStorage 将选定的 AppStorage 属性保留在设备磁盘上。 string age: number} PersistentStorage.persistProp<User>('user', { name: '', age: 0 })其持久化和读回UI的能力都需要依赖 AppStorage

    21300编辑于 2025-03-17
  • 来自专栏肘子的Swift记事本

    在 SwiftUI 下使用 NSUbiquitousKeyValueStore 同步数据

    通过@AppStorage,视图可以对 UserDefaults 中值的变化做出及时响应。 在多数情况下,我们可以将@AppStorage 看作是 UserDefaults 的 SwiftUI 包装,但在个别情况下,@AppStorage 并不完全与 UserDefaults 的行为保持一致( 完整包装),Zephyr 对于@AppStorage 的支持目前是有问题的,笔者并不推荐使用。 在 @AppStorage 研究[7] 一文中,我介绍过如何对@AppStorage 进行统一管理、集中注入的方法。 例如: class Defaults: ObservableObject { @AppStorage("name") public var name = "fatbobman" @AppStorage

    5.6K40编辑于 2022-07-28
  • 来自专栏C++

    【HarmonyOS之旅】ArkTS语法(一)

    AppStorage包含整个应用程序中需要访问的所有状态属性,只要应用程序保持运行,AppStorage就会保存所有属性及属性值,属性值可以通过唯一的键值进行访问。 组件可以通过装饰器将应用程序状态数据与AppStorage进行同步,应用业务逻辑的实现也可以通过接口访问AppStorage。 默认情况下,AppStorage中的属性是可变的,AppStorage还可使用不可变(只读)属性。 @StorageLink装饰器 组件通过使用@StorageLink(key)装饰的状态变量,与AppStorage建立双向数据绑定,key为AppStorage中的属性键值。 首先需要将对应系统属性绑定到AppStorage中,再通过AppStorage中的方法或者装饰器访问对应系统的属性数据。 感谢各位大佬支持!!! 互三啦!!!

    84310编辑于 2024-12-26
  • 来自专栏鸿蒙开发笔记

    OpenHarmony设备环境查询:Environment

    它为AppStorage提供了一系列描述应用程序运行状态的属性。Environment的所有属性都是不可变的(即应用不可写入),所有的属性都是简单类型。 使用场景从UI中访问Environment参数● 使用Environment.envProp将设备运行的环境变量存入AppStorage中:// 将设备的语言code存入AppStorage,默认值为enEnvironment.envProp 说明:@StorageProp关联的环境参数可以在本地更改,但不能同步回AppStorage中,因为应用对环境变量参数是不可写的,只能在Environment中查询。 // 将设备languageCode存入AppStorage中Environment.envProp('languageCode', 'en');let enable: undefined = AppStorage.get <string> = AppStorage.prop('languageCode'); if (lang.get() === 'zh') { console.info('你好');} else {

    28210编辑于 2025-05-16
  • 来自专栏鸿蒙开发笔记

    鸿蒙应用开发-初见:ArkTS

    AppStorage:应用全局的UI状态存储LocalStorage是页面级的,通常应用于页面内的数据共享AppStorage是一个特殊的单例LocalStorage对象,是应用级的数据库,和进程绑定, PersistentStorage:持久化存储UI状态LocalStorage和AppStorage都是运行时的内存PersistentStorage将选定的AppStorage属性保留在设备磁盘上应用程序通过 API,以决定哪些AppStorage属性应借助PersistentStorage持久化UI和业务逻辑不直接访问PersistentStorage中的属性,所有属性访问都是对AppStorage的访问, @StorageLink装饰的变量是和AppStorage中建立双向同步的,所以@StorageLink('aProp') aProp的变化会被同步回AppStorage中。 将在PersistentStorage查询到的值写入AppStorage中。

    95710编辑于 2024-06-14
  • 鸿蒙5开发隐藏案例分享---自由流转的浏览进度接续

    监听滚动位置Scroll(this.scroller) { // ...列表内容}.onDidScroll((xOffset, yOffset) => { // 记录当前滚动到的y轴位置 AppStorage.setOrCreate 源设备保存数据async onContinue(wantParam) { const currentOffset = AppStorage.get('currentOffset') || 0; const 监听播放进度this.avPlayer.on('timeUpdate', (currentTime) => { AppStorage.setOrCreate('videoProgress', currentTime 保存进度(onContinue方法内)const progress = AppStorage.get('videoProgress') || 0;const dataObject = distributedDataObject.create 保存数据(onContinue方法内)const scrollY = AppStorage.get('webScrollY') || 0;const dataObject = distributedDataObject.create

    22410编辑于 2025-06-03
  • 来自专栏HarmonyOS NEXT实战

    HarmonyOS NEXT实战:网络状态监控

    思路:通过使用 @ohos.net.connection 的能力,在网络连接状态发生变化时,判断当前网络是否可以访问互联网,并将判断结果存储到 AppStorage 中。 需要判断网络连接状态时,直接从 AppStorage 获取结果。 NetworkUtil.netConnection.on('netAvailable', (data) => { Logger.info('NetworkUtil netAvailable '); AppStorage.setOrCreate data: connection.NetCapabilityInfo) => { Logger.info('NetworkUtil netCapabilitiesChange'); AppStorage.setOrCreate ); NetworkUtil.netConnection.on('netLost', () => { Logger.info('NetworkUtil netLost'); AppStorage.setOrCreate

    26100编辑于 2025-06-27
领券