【问题标题】:Implicit use of 'self' in closure error when presenting a pop over in Swift 2.2在 Swift 2.2 中显示弹出窗口时,在闭包错误中隐式使用“self”
【发布时间】:2016-07-13 07:52:53
【问题描述】:

如果用户成功重置密码,我会尝试将视图控制器显示为弹出窗口。基本上,如果通过电子邮件发送密码重置指令电子邮件一切正常,则将运行以下代码。但是,我收到了错误

'self' 的隐式用户在闭包中;使用 '.self' 使捕获语义明确

在下面的第一行:

    let VC = storyboard?.instantiateViewControllerWithIdentifier("ResetPasswordSuccessPopOver") as! ResetPasswordSuccessPopOverViewController
    VC.preferredContentSize = CGSize(width: UIScreen.mainScreen().bounds.width, height: 100)
    let navController = UINavigationController(rootViewController: VC)
    navController.modalPresentationStyle = UIModalPresentationStyle.Popover
    let popover = navController.popoverPresentationController
    popover?.delegate = self

   self.presentViewController(navController, animated: true, completion: nil)

【问题讨论】:

  • 请写完整代码或解释清楚。
  • 不确定您认为需要哪些其他代码才能查看该问题。 @Anbu.Karthik 无需更多代码就发现了我的错误,我在这个视图控制器中的其余代码与弹出无关,这就是我没有提供它的原因。不明白为什么会有这么多反对票。

标签: ios swift


【解决方案1】:

试试这个

let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("ResetPasswordSuccessPopOver") as ResetPasswordSuccessPopOverViewController

或者试试这个

  let viewController = self.storyboard!.instantiateViewControllerWithIdentifier("ResetPasswordSuccessPopOver") as ResetPasswordSuccessPopOverViewController

【讨论】:

  • 感谢安布!我使用了你的第二个建议。我现在看到了我的错误。谢谢!
【解决方案2】:

在 Swift 中,被捕获的自引用的语义不允许是显式的,因此在闭包内引用对象的任何成员都需要您展示您对捕获的全部承诺,并将 self. 显式添加到引用的标识符中。

let VC = self.storyboard?.instantiateViewControllerWithIdentifier("ResetPasswordSuccessPopOver") as! ResetPasswordSuccessPopOverViewController

storyboard?.之前注意self.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    相关资源
    最近更新 更多