我正在尝试使用 performSegueWithIdentifier
将一些字符串数据传递给 View Controller ,但我收到此错误 Cannot convert value of type 'AnyObject?'. Type(Aka'Optional<AnyObject>.Type) to expected argument type 'AnyObject?'
即使我使用 sender:self
, 它仍然不起作用。
在 Storyboard中,通过将 segue 从第一个 View Controller 拖到第二个 View Controller 来创建 segue。
@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?
因为那是一个类型,而不是一个对象。
进行此更改时遇到的错误,在闭包中隐式使用“self”,是指函数 performSegueWithIdentifier
的调用,而不是 sender
参数。
由于您是从闭包中调用函数,Swift 需要确保闭包捕获 self
即防止它在闭包仍然存在时被释放。
在闭包之外,这个捕获是不必要的,因为 self
引用的对象已经被释放,代码无法执行(代码是 self
).
要捕获self
,只需在闭包中引用它:
self.performSegueWithIdentifier("fromSeventhToFifth", sender: self)
或
self.performSegueWithIdentifier("fromSeventhToFifth", sender: nil)
关于ios - performSegueWithIdentifier - 无法将类型 'AnyObject' 的值转换为参数类型 'AnyObject?',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38235478/