Swift - 这段代码是错误的还是我应该使用 UserDefaults?

Swift - Is this code wrong or should I use UserDefaults?

我有一个连接到 Firebase 的应用程序,您可以使用 Google 和 Facebook 登录。该应用程序有一个主屏幕,当用户登录时加载。如果用户之前已经登录,我不想显示登录屏幕。所以我在主屏幕中使用这段代码来检查用户是否登录。主屏幕是应用程序中的初始视图控制器

    override func viewDidAppear(_ animated: Bool) {
    if Auth.auth().currentUser != nil{
        // user is signed in
    }else{
        // No user is signed in.
        performSegue(withIdentifier: "login", sender: nil)
    }
}

此代码运行良好。我知道,我也可以使用 UserDefaults,但这似乎是一种更简单的方法。这是错误的还是我应该使用 UserDefaults?

但唯一的问题是,很快就会显示主屏幕,然后执行 segue 到登录屏幕,我猜这是因为它在 viewdidApepar 方法中,所以代码在之后执行viewcontroller 出现了。你知道解决办法吗?

这是我个人做的,AppDelegate 中的 didFinishLaunchingWithOptions。

    if UserManager.sharedManager.currentUser != nil {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
        let viewController = storyboard.instantiateInitialViewController()
        appDelegate.window?.rootViewController = viewController
    } else {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let storyboard = UIStoryboard(name: "Login", bundle: Bundle.main)
        let viewController = storyboard.instantiateInitialViewController()
        appDelegate.window?.rootViewController = viewController
    }

当然我有一个 UserManager 来处理用户是否登录。(UserManager:NSObject)

var currentUser: User? {
    return User.unarchiveStoredUser()
}

用户与解码器一起存储到 UserDefautls 中,然后取消存档以验证用户是否登录(用户:NSObject)

func archiveUser() {
    let data = NSKeyedArchiver.archivedData(withRootObject: self)
    UserDefaults.standard.set(data, forKey: "userIdentifier")
    UserDefaults.standard.synchronize()
}

class func unarchiveStoredUser() -> User? {
    if let data = UserDefaults.standard.object(forKey: "userIdentifier") as? Data {
        let user = NSKeyedUnarchiver.unarchiveObject(with: data) as! User
        return user
    }
    return nil
}

希望对您有所帮助。