Ios ';隐含使用';自我';关闭;使用';赛尔夫';使捕获语义显式';尝试使用身份验证切换视图控制器时

Ios ';隐含使用';自我';关闭;使用';赛尔夫';使捕获语义显式';尝试使用身份验证切换视图控制器时,ios,swift,authentication,viewcontroller,Ios,Swift,Authentication,Viewcontroller,我目前正在学习Xcode 11.4中的Swift 5。我试图构建一个代码,当按下按钮时,它使用face id对用户进行身份验证。一旦用户通过身份验证,它将切换到不同的视图控制器 目前face id可以正常工作,但之后应用程序崩溃。我在当前行收到此错误: 在结束语中内隐使用“自我”;使用“self.”使捕获语义显式 任何帮助都会很好 添加self以从闭包内部精确引用现有视图控制器,如下所示: context.evaluatePolicy(LAPolicy.deviceOwnerAuthentica

我目前正在学习Xcode 11.4中的Swift 5。我试图构建一个代码,当按下按钮时,它使用face id对用户进行身份验证。一旦用户通过身份验证,它将切换到不同的视图控制器

目前face id可以正常工作,但之后应用程序崩溃。我在当前行收到此错误:

在结束语中内隐使用“自我”;使用“self.”使捕获语义显式


任何帮助都会很好

添加
self
以从闭包内部精确引用现有视图控制器,如下所示:

context.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: "message") { (good, error) in
  if good {
    print("good")
    self.present(vc, animated: true)
  }
  else {
    print("error")
  }
}

因为evaluatePolicy completionhandler是在函数返回后执行的转义闭包,所以需要提供self来进行显式捕获

context.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: "message") { (success, error) in
    guard success else { return }
    let vc = storyboard?.instantiateViewController(identifier: "blue_vc") as! blueViewController
    self.present(vc,animated: true) 
}

你看到错误信息了吗?它非常清晰,甚至包含修复。
context.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: "message") { (success, error) in
    guard success else { return }
    let vc = storyboard?.instantiateViewController(identifier: "blue_vc") as! blueViewController
    self.present(vc,animated: true) 
}