Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用非可选属性为UITableViewController创建子类_Ios_Swift - Fatal编程技术网

Ios 如何使用非可选属性为UITableViewController创建子类

Ios 如何使用非可选属性为UITableViewController创建子类,ios,swift,Ios,Swift,如果我像这样设置UITableViewController: class FolderTableViewController: UITableViewController { var rootFolder:String init(path:String) { rootFolder = path super.init(style: .Plain) } } 然后我得到一个运行时错误:致命错误:使用未实现的初始值设定项“

如果我像这样设置UITableViewController:

class FolderTableViewController: UITableViewController {

    var rootFolder:String

    init(path:String) {

        rootFolder = path        
        super.init(style: .Plain)

    }
}
然后我得到一个运行时错误:
致命错误:使用未实现的初始值设定项“init(nibName:bundle:)”

如果我添加初始值设定项
init(nibName:bundle:)
,那么我会得到一个编译时错误
属性'self.rootFolder'未在super.init调用中初始化

。。。但我无法在该方法中设置字符串——字符串值仅在我自己的初始化器中可用,事实上已经设置好了

我是否遗漏了一些关于这应该如何工作的信息,或者这是一个bug?我能想到的唯一可能的解决方案是将属性设置为可选


感谢您提供的帮助。

如果您想快速消除错误,可以执行以下操作:

var rootFolder:String = ""
但是,如果您想完全理解为什么会出现这种错误,那么您应该阅读Swift文档的这一部分:

下面是Ash Furrow关于Swift初始值设定者的一篇精彩文章:

这是一个很好的解决方案;它解决了眼前的问题。但是所发生的事情似乎并没有遵循开发者指南。代码流从(子类初始值设定项)->(超类初始值设定项)->(不同的子类初始值设定项)开始。文档的“规则1”说“指定的初始值设定项必须从其直接超类调用指定的初始值设定项”。但是UITableViewController有一个指定的初始值设定项,它调用同一类(而不是超类)中的另一个指定的初始值设定项。我不确定你所说的“(不同的子类初始值设定项)”是什么意思。在上面的代码中,主要问题是在调用super的init之前,必须将子类的property
rootFolder
设置为初始值。从Swift文档:“类和结构必须在创建该类或结构的实例时将其所有存储属性设置为适当的初始值。存储属性不能处于不确定状态。”另外,为了澄清,您得到关于
init(nibName:bundle:)的第二个错误的原因
是因为您在子类中指定了一个指定的初始值设定项,这样子类就不会继承超类指定的初始值设定项:aus10c:从另一个邮件列表的进一步问题来看,这似乎是一个bug,将在Swift的未来版本中修复。