我收到以下错误,我想知道为什么它需要拥有初始化程序以及如何处理它?
Class'MasterViewController'没有初始化程序
struct FullOrderData :Codable
{
let meta :meta
let links : links
let data :[OrderData]
}
class MasterViewController: UITableViewController {
var fullOrder : FullOrderData
}
您需要添加自定义初始化程序init
,如下所示:
class MasterViewController: UITableViewController {
var fullOrder : FullOrderData
init(fullOrder: FullOrderData) {
self.fullOrder = fullOrder
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Swift对于属性初始化有非常严格的规则:如果给一个类任何没有默认值的属性,则必须创建一个设置这些默认值的初始化程序。
简单的解决方案是在定义属性时给您的属性一个合理的初始值,如下所示:
class MasterViewController: UITableViewController {
private lazy var fullOrder = FullOrderData()
}
稍微复杂一点的解决方案是创建一个自定义初始化程序,该初始化程序将属性的默认值放在一个位置,然后调用super.init()
。使用UIViewController
和情节提要时,要覆盖的初始化程序应如下所示:
required init?(coder aDecoder: NSCoder) {
fullOrder = [] // any initialiser
super.init(coder: aDecoder)
}