在Guard语句swift中提出一个ViewController

时间:2018-05-10 05:38:33

标签: ios swift guard presentviewcontroller

我正在尝试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
    }

我想知道这是否是最佳实践,因为在呈现viewcontroller之后返回并没有多大意义,但在guard语句中需要它,因为guard语句不能通过。

2 个答案:

答案 0 :(得分:4)

回答有关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)
    }
  }
}

答案 1 :(得分:2)

您可以尝试 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的else语句来更早地测试否定案例,而不是等待嵌套条件首先传递。 read more with example