SwiftUI如何统计并展示用户打开应用的累计次数
实现App启动次数统计功能解决方案
实现逻辑
- 用
UserDefaults持久化存储启动计数,App卸载前数据不会丢失,SwiftUI可直接用@AppStorage属性包装器简化读写操作 - 监听App启动/进入活跃状态的事件,每次触发时更新计数并同步存储
- 视图层直接绑定存储的计数值,自动更新展示内容
完整可运行代码
1. App主入口逻辑(处理计数累加)
如果切前台再切回也算一次启动,用以下代码:
@main struct YourAppName: App { // launchCount为存储的key值,全局唯一即可,初始值可根据需求调整 @AppStorage("launchCount") private var launchCount = 0 @Environment(\.scenePhase) private var scenePhase var body: some Scene { WindowGroup { LaunchCountView() } .onChange(of: scenePhase) { newPhase in // App进入前台活跃状态时计数+1 if newPhase == .active { launchCount += 1 } } } }
如果仅冷启动(完全杀掉进程后重新打开)才算一次启动,用简化版本:
@main struct YourAppName: App { @AppStorage("launchCount") private var launchCount = 0 init() { // App初始化时计数+1,仅冷启动会触发 launchCount += 1 } var body: some Scene { WindowGroup { LaunchCountView() } } }
2. 视图层代码(展示计数)
// 遵循Swift命名规范,视图名首字母大写 struct LaunchCountView: View { // 和入口处用同一个key读取存储的计数值,自动响应数据更新 @AppStorage("launchCount") private var launchCount = 0 var body: some View { VStack { HStack { Image(systemName: "eye") .resizable() .scaledToFit() .frame(width: 50, height: 50) // 直接绑定计数值展示 Text("\(launchCount)") .font(.system(size: 25)) .fontWeight(.bold) .foregroundColor(Color.black) .padding(.leading) } } .frame(width: 250, height: 150) .background(Color.gray.opacity(0.5)) .cornerRadius(10) } }
需求适配说明
你要求首次打开展示0,打开两次展示2,只需要调整初始值即可:把@AppStorage("launchCount") private var launchCount = 0里的初始值改成-1,第一次启动加1后就是0,第三次启动加1后就是2,完全匹配你的展示需求。
内容的提问来源于stack exchange,提问作者user16253979
相关产品推荐
相关产品推荐

