【发布时间】:2015-01-17 16:15:54
【问题描述】:
我正在快速覆盖UITableViewController,其中我有两个必需的变量,它们使用self 的weak 引用进行初始化,因为它们用于实现UITableViewDataSource 协议并需要self 引用使用其tableView 属性
class VideosListViewController: UITableViewController {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.datasourceOfflineVideos = ASDataSource(tableViewController: self)
self.datasourceOnlineVideos = ASDataSource(tableViewController: self)
}
// MARK: - Variables
var datasourceOnlineVideos:ASDataSource
var datasourceOfflineVideos:ASDataSource
}
现在的问题是它给了我错误Property not initialized at super.init call,正如这里所解释的那样:Error in Swift class: Property not initialized at super.init call。
Swift 的编译器会执行四项有用的安全检查,以确保两阶段初始化完成时不会出错
安全检查 1 指定的初始化程序必须确保其类引入的所有“属性在它委托给超类初始化程序之前都已初始化。
摘自:Apple Inc. “Swift 编程语言”。电子书。 https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11
所以我的问题是:
如果 swift 类中的实例变量需要 self 引用来初始化,如这里的 ASDataSource 类型变量,我该怎么做??
由于 swift 不允许我在初始化所有实例变量之前调用 super.init() 并且也不允许我在调用 init() 之前在初始化器中使用 self super.init()
目前我正在使用可选变量来解决问题。但出于学习目的,我想知道如何做到这一点。在此先感谢:)
【问题讨论】:
标签: ios swift properties compiler-errors initialization