我对自定义初始化器的概念有些陌生,所以我很难理解如果我试图做什么是可能的。通过故事板传递自定义初始化参数在Swift中陷入
我正在使用源代码来创建消息应用程序。所有代码都是在不使用故事板的情况下编写的,我现在想要实现这些故事板。
,因为它在源代码中实现初始化是这样的:
init(chat: Chat) {
self.chat = chat
super.init(nibName: nil, bundle: nil)
title = chat.user.name
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
在didSelectRowAtIndexPath
方法,原来的代码通过自定义的初始化参数是这样的:
let chat = chats[indexPath.row]
let chatViewController = MessagesViewController(chat: chat)
navigationController?.pushViewController(chatViewController, animated: true)
我想什么这只是简单地创建一个故事板UIViewController,将该类设置为原始代码,即将Storyboard ViewController设置为:MessagesViewController,然后执行segue。就像这样:
if segue.identifier == "ToMessages" {
var messagesViewController: MessagesViewController = segue.destinationViewController as MessagesViewController
let chat = chats[indexPath.row]
messagesViewController.chat = chat
}
然后performSegueWithIdentifier("ToMessages", sender: self)
当我这样做,我得到这个致命的错误:fatal error: init(coder:) has not been implemented:
从我的研究和原始源代码的理解,原因是因为我没有初始化参数chat
。我意识到我可能不会走在正确的轨道上,如果是这样的话,我们将不胜感激。
如果我对什么事情是正确的,那么我的具体问题是如何在prepareForSegue方法实现的参数,是这样的:
var destinationVC = segue.destinationViewController as MessagesViewController(chat: chat)
看来我得到这个错误:'属性self.chat未初始化super.init调用' – YichenBman 2015-03-31 19:29:30