首页 > 解决方案 > 在 applicationWillTerminate() 中找出应用程序在哪个视图上终止

问题描述

所以假设我的应用程序中有多个屏幕:View1View2

如果用户在某个屏幕上,比如说View3,并且应用程序因用户退出应用程序等而终止,我知道applicationWillTerminate(_ application: UIApplication)会被调用,但我怎么知道在应用程序终止之前用户在哪个视图上?

我需要一些这样的功能:

func applicationWillTerminate(_ application: UIApplication) {
        let viewUserIsOn = getViewUserWasOnWhenAppQuit() 
        
        switch viewUserIsOn{
        case .view1:
            doThisIfOnView1()
        case .view2:
            doThisIfOnView2()
        default:
            doNothing()
        }
    }

标签: iosswiftswiftuiappdelegateapplicationwillterminate

解决方案


如果视图按顺序显示,您可以执行以下操作:

class Settings: ObservableObject {
    static let shared = Settings()

    @Published var viewType: ViewType!
}

enum ViewType {
    case view1, view2, view3
}

struct View1: View {
    @ObservedObject var settings = Settings.shared

    var body: some View {
        [...]
        .onAppear {
            settings.viewType = .view1
        }
    }
}

struct View2: View {
    @ObservedObject var settings = Settings.shared

    var body: some View {
        [...]
        .onAppear {
            settings.viewType = .view2
        }
    }
}

// same for View 3

func applicationWillTerminate(_ application: UIApplication) {
    switch Settings.shared.viewType {
        case .view1: // View 1 was displayed
        case .view2: // View 2 was displayed
        case .view3: // View 3 was displayed
    }
}

推荐阅读