统计用户浏览量 (SwiftUI)

Count user views (SwiftUI)

如何计算用户浏览量?

例如,用户打开了一个应用并获得了 +1 浏览量。

下次每次打开应用程序时,都会添加 1 个视图。以此类推,直到 100-200-300 等等

第一张图片,零观看次数 但是当用户打开应用程序两次时,就会有两个视图。每一个新发现都会增加一次观看

如果用户打开应用一百次,那么已经显示了一百次

这是我的代码:

struct views: View {
   var body: some View {
        VStack {
            
            HStack {
                
                Image(systemName: "eye")
                    .resizable()
                    .scaledToFit()
                    .frame(width: 50, height: 50)
                Text("0")
                    .font(.system(size: 25))
                    .fontWeight(.bold)
                    .foregroundColor(Color.black)
                    .padding(.leading)
                
            }
            
        }
        .frame(width: 250, height: 150)
        .background(Color.gray.opacity(0.5))
        .cornerRadius(10)
    }
}

请帮助我,我是 swift 的新手,我将不胜感激,谢谢!

您可以使用 @AppStorage 来存储观看次数 (https://www.hackingwithswift.com/quick-start/swiftui/what-is-the-appstorage-property-wrapper)。

要知道应用程序何时激活并添加到计数器,您可以使用 @Environment(\.scenePhase) (https://www.hackingwithswift.com/quick-start/swiftui/how-to-detect-when-your-app-moves-to-the-background-or-foreground-with-scenephase)。

struct ContentView: View {
    @AppStorage("userViews") private var userViews = 0
    @Environment(\.scenePhase) var scenePhase
    
    var body: some View {
        VStack {
            HStack {
                Image(systemName: "eye")
                    .resizable()
                    .scaledToFit()
                    .frame(width: 50, height: 50)
                Text("\(userViews)")
                    .font(.system(size: 25))
                    .fontWeight(.bold)
                    .foregroundColor(Color.black)
                    .padding(.leading)
                
            }
        }
        .frame(width: 250, height: 150)
        .background(Color.gray.opacity(0.5))
        .cornerRadius(10)
        
        .onChange(of: scenePhase) { newPhase in
            if newPhase == .active {
                userViews += 1
            }
        }
    }
}