performSegueWithIdentifier - 无法将类型'AnyObject'的值转换为参数类型'AnyObject?'
问题描述:
我想通过一些字符串数据传递给使用performSegueWithIdentifier
的视图控制器,但我得到这个错误Cannot convert value of type 'AnyObject?'. Type(Aka'Optional<AnyObject>.Type) to expected argument type 'AnyObject?'
即使我使用sender:self
,它仍然不起作用。 在故事板中,通过从第一个视图控制器拖动一个Segue来制作Segue。performSegueWithIdentifier - 无法将类型'AnyObject'的值转换为参数类型'AnyObject?'
@IBAction func resetPassword(sender: AnyObject) {
FIRAuth.auth()?.sendPasswordResetWithEmail(emailTextField.text!, completion: { (error) in
var customError = error?.localizedDescription
if error == nil {
let noError = "Click on the link received in the email"
self.emailTextField.text = ""
self.emailTextField.attributedPlaceholder = NSAttributedString(string: noError, attributes:[NSForegroundColorAttributeName: UIColor.blueColor()])
self.customErroSent = noError
performSegueWithIdentifier("fromSeventhToFifth", sender: AnyObject?)
//self.resetButtonOutlet.hidden = true
// self.emailTextField.hidden = true
} else {
self.emailTextField.text = ""
self.emailTextField.attributedPlaceholder = NSAttributedString(string:customError!, attributes:[NSForegroundColorAttributeName: UIColor.redColor()])
}
})
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "fromSeventhToFifth" {
if let destViewController = segue.destinationViewController as? FifthViewController {
destViewController.label.text = customErroSent
}
}
}
}
答
的sender
参数是AnyObject?
型的 - 这样你就可以提供任何对象引用或nil
,但你不能把AnyObject?
,因为这是一个类型,而不是一个对象。
当你做出这种改变,在关闭隐式使用的“自我”,你所得到的错误,是指功能performSegueWithIdentifier
,而不是sender
参数的调用。
既然你调用从封闭中的函数,斯威夫特需要确保关闭捕捉self
即防止它被释放,而封闭仍然存在。
在关闭之外,此捕获不是必需的,就好像self
所指的对象已被释放,代码不能执行(代码是self
的一部分)。
要捕获self
,只是指它的闭包:
self.performSegueWithIdentifier("fromSeventhToFifth", sender: self)
或
self.performSegueWithIdentifier("fromSeventhToFifth", sender: nil)
答
AnyObject?
是可选类型。您应该将它设置为零或Class的任何实例。例如:
performSegueWithIdentifier("fromSeventhToFifth", sender: nil)
performSegueWithIdentifier("fromSeventhToFifth", sender: slef)
你传入类型'AnyObject' - 你需要传递一个对象,你可以说? 'performSegueWithIdentifier(“fromSeventhToFifth”,sender:self)''或者因为它接受一个可选的even'performSegueWithIdentifier(“fromSeventhToFifth”,sender:nil)' – Paulw11
@ Paulw11如果我通过'self',我得到错误“Implicit use of'self '关闭'。使用“自我”来明确捕捉语义。如果我通过'nil',我会得到与上面相同的错误。 http://i.imgur.com/lSAnK8Y.png – bibscy
你需要说'self.performSegueWithIdentifier(“fromSeventhToFifth”,sender:self)'。请注意使用'self'来限定方法 – Paulw11