ios - performSegueWithIdentifier - 无法将类型 'AnyObject' 的值转换为参数类型 'AnyObject?'

标签 ios swift segue

我正在尝试使用 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/

相关文章:

iOS 以编程方式触发的 segue 在成功时执行多次

ios - 无法在 Objective-C 中使用 Swift 生成的共享框架

iphone - RestKit 更新到 xcode 4.4.1 后出现警告

ios - 快速加载两个 Collection View 和一个 TableView 的核心数据

json - Swift - 在 LaunchScreen 上执行代码

ios - iOS/swift中通过TableView显示静态内容

iOS 13 - 崩溃 : com. apple.main-thread EXC_BREAKPOINT (CoreFoundation)

ios - 如何使用 Phonegap 命令行工具为 iOS 发布 Build?

swift - 如何更改CAShapeLayer内的区域?

iphone - 如何清除以前的 ViewController 的内存