swift 3 prepare(for segue:) 功能坏了? [复制]

Posted

技术标签:

【中文标题】swift 3 prepare(for segue:) 功能坏了? [复制]【英文标题】:swift 3 prepare(for segue: ) function broken? [duplicate] 【发布时间】:2016-09-19 00:19:15 【问题描述】:

由于某些奇怪的原因,使用 swift 3,prepare(for segue: 方法拒绝确认 segue 标识符。我将以下 IBAction 连接到 UI 上的几个按钮:

@IBAction func goToImagesPicker(_ sender: AnyObject) 
    performSegue(withIdentifier: "showImagePicker", sender: sender)



@IBAction func goToNamePicker(_ sender: AnyObject) 
    performSegue(withIdentifier: "showNamePicker", sender: sender)

但是在我的 prepare(for segue: 方法中,它不能识别不同的 segue 标识符,我知道是因为我的控制台没有记录我分配给每个标识符的消息:

func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) 

        if segue.identifier == "showImagePicker" 

            print("This is the Image Picker")

        

        if segue.identifier == "showNamePicker"  

            print("This is the Name Picker")

         

有什么建议吗?还是这只是一个错误?

【问题讨论】:

替换为以下代码覆盖 func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) print("test"); // 使用 segue.destinationViewController 获取新的视图控制器。 // 将选中的对象传递给新的视图控制器。 【参考方案1】:

您的方法根本没有被调用,因为您的签名错误。它在 Xcode 8 beta 6 中被更改为:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 

注意sender 的类型是Any? 而不是AnyObject?。升级 Xcode 后你应该遇到一个错误,它告诉你你的方法没有覆盖其超类中的任何方法,这应该在你删除 override 之前提示你。

【讨论】:

这似乎是解决方案,但是,我彻底阅读了文档,我从未看到发件人对象的语法发生变化......所以我只是在不知不觉中删除了覆盖。不过,无论如何,谢谢! 截至今天,我得到一个没有覆盖但没有调用覆盖的错误

以上是关于swift 3 prepare(for segue:) 功能坏了? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4:在 viewDidLoad 之后调用 prepare(for segue:)

iOS 和 Swift:可以强制解开 tableView.indexPath?

如何在准备中的 switch 语句中使用可选绑定(segue :)

如果 segue.identifier == "showChildFiles" 当 segue 标识符看起来正确时,Swift 3 准备 segue 不通过

Swift 3 - 调用准备 segue 时视图不更新

自定义幻灯片 Segue - Xcode 8.0 Swift 3.0