在 guard 语句 swift 中呈现 ViewController

Present a ViewController inside guard statement swift

我正在尝试 present viewcontroller 以防状态(Int?)为零,如下所示:

    guard let statusCode = status else {
        DispatchQueue.main.async() {
            let initViewController = self.storyboard!.instantiateViewController(withIdentifier: "SignInViewController")
            self.present(initViewController, animated: false, completion: nil)
        }
            return
    }

我想知道这是否是最佳做法,因为 return 在呈现 viewcontroller 之后没有多大意义,但在 guard 语句中需要它作为 guard 声明一定不能落空。

您可以尝试 if 语句

if let statusCode = status {
    //Success Block    
}
else{
    DispatchQueue.main.async() {
        let initViewController = self.storyboard!.instantiateViewController(withIdentifier: "SearchTabBarViewController")
        self.present(initViewController, animated: false, completion: nil)
    }
}

我们中的许多人都熟悉 可选绑定 和展开可选值时的“if let”语法约定。 “if let”允许我们仅在有值时才安全地解包可选值,如果没有,代码块将不会 运行。简而言之,它的重点是值存在时的“真实”条件。 与“if let”不同,“guard”语句使提前退出成为可能,它强调有错误的负面案例而不是正面案例。这意味着如果条件不满足,我们可以通过 运行ning 守卫的 else 语句来更早地测试负面情况,而不是等待嵌套条件先通过。 read more with example

回答有关 guard 语句和 return 关键字的问题

func yourFunc() {
    guard let statusCode = status else {
      return DispatchQueue.main.async() { [weak self] _ in
        let initViewController = self?.storyboard!.instantiateViewController(withIdentifier: "SignInViewController")
        self?.present(initViewController!, animated: false, completion: nil)
    }
  }
}