Last edited time
Jan 11, 2025 02:36 AM
type
status
date
slug
summary
tags
category
icon
password
Q1: 如果遇到在别的地方需要修改swiftui界面时,但又无法直接操作页面内的数据时,该怎么办呢?
方法一:
使用 @Published 和 ObservableObject
通过 ObservableObject 和 @Published 将状态管理抽离到一个外部的共享数据模型中,然后通过 @EnvironmentObject 或 @StateObject 将数据绑定到页面。
示例代码
1. 定义状态管理类
2. 在视图中使用 @StateObject 或 @EnvironmentObject
3. 在其他地方更新数据
当 sharedData.message 或 sharedData.count 被修改时,ContentView 会自动更新。
方法二
使用NotificationCenter.default.post,这个方法基本无敌,可以在任何地方使用,不局限于swiftui页面。
示例代码
1. 定义通知的名称
2. 在某处发送通知
3. 在 SwiftUI 页面接收通知
- 通过onReceive接受
- 通过.sink自己控制监听
注意这种方式需要自己取消监听
Q2: 有时候遇到页面崩溃出现黄色感叹号的情况,但一时找不到逻辑原因?
可以留心观察你的代码结构。
一定要注意如果使用
NavigationStack
的话,navigationDestination
和navigationTitle
一定要在NavigationStack
内部。Q3: 当应用从后台进入前台的时候,默认是不会触发当前页面的.onAppear
或者.task
事件的,此时如果想要每次进入前台的时候都触发数据更新该怎么办?
可以在对应页面订阅进入前台事件,具体代码如下:
也可以通过
onChange
监听设备场景- 作者:七月
- 链接:https://huaqinda.com/article/158bbdbf-a033-80d9-9f49-f035aa42c39b
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。