Class在Swift中没有初始化程序

问题描述 投票:-2回答:2

我收到以下错误,我想知道为什么它需要拥有初始化程序以及如何处理它?

Class'MasterViewController'没有初始化程序

struct FullOrderData :Codable
{
    let meta :meta
    let links : links
    let data :[OrderData]
}

class MasterViewController: UITableViewController {

   var fullOrder : FullOrderData

}
swift
2个回答
0
投票

您需要添加自定义初始化程序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")
    }
}

0
投票

Swift对于属性初始化有非常严格的规则:如果给一个类任何没有默认值的属性,则必须创建一个设置这些默认值的初始化程序。

简单的解决方案是在定义属性时给您的属性一个合理的初始值,如下所示:

class MasterViewController: UITableViewController {

  private lazy var fullOrder = FullOrderData()

}

稍微复杂一点的解决方案是创建一个自定义初始化程序,该初始化程序将属性的默认值放在一个位置,然后调用super.init()。使用UIViewController和情节提要时,要覆盖的初始化程序应如下所示:

required init?(coder aDecoder: NSCoder) {
    fullOrder = [] // any initialiser 
    super.init(coder: aDecoder)
}
© www.soinside.com 2019 - 2024. All rights reserved.