2016-07-06 69 views
1

我想通过一些字符串数据传递给使用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 


       } 
      } 
     } 
    } 
+0

你传入类型'AnyObject' - 你需要传递一个对象,你可以说? 'performSegueWithIdentifier(“fromSeventhToFifth”,sender:self)''或者因为它接受一个可选的even'performSegueWithIdentifier(“fromSeventhToFifth”,sender:nil)' – Paulw11

+0

@ Paulw11如果我通过'self',我得到错误“Implicit use of'self '关闭'。使用“自我”来明确捕捉语义。如果我通过'nil',我会得到与上面相同的错误。 http://i.imgur.com/lSAnK8Y.png – bibscy

+2

你需要说'self.performSegueWithIdentifier(“fromSeventhToFifth”,sender:self)'。请注意使用'self'来限定方法 – Paulw11

回答

1

sender参数是AnyObject?型的 - 这样你就可以提供任何对象引用或nil,但你不能把AnyObject?,因为这是一个类型,而不是一个对象。

当你做出这种改变,在关闭隐式使用的“自我”,你所得到的错误,是指功能performSegueWithIdentifier,而不是sender参数的调用。

既然你调用从封闭中的函数,斯威夫特需要确保关闭捕捉self即防止它被释放,而封闭仍然存在。

在关闭之外,此捕获不是必需的,就好像self所指的对象已被释放,代码不能执行(代码是self的一部分)。

要捕获self,只是指它的闭包:

self.performSegueWithIdentifier("fromSeventhToFifth", sender: self) 

self.performSegueWithIdentifier("fromSeventhToFifth", sender: nil) 
0

AnyObject?是可选类型。您应该将它设置为零或Class的任何实例。例如:

performSegueWithIdentifier("fromSeventhToFifth", sender: nil) 
performSegueWithIdentifier("fromSeventhToFifth", sender: slef) 
相关问题