【问题标题】:Return from initializer without initializing all stored properties swift ios从初始化程序返回而不初始化所有存储的属性swift ios
【发布时间】:2018-02-02 12:13:25
【问题描述】:

我正在为WidgetData 类中的 SQLite 数据库初始化变量,但我现在遇到了一个错误,

从初始化程序返回而不初始化所有存储的属性

但之前它运行成功。

我关注了this,但即使我添加了空值仍然出现错误,请帮助解决这个问题。

这是我到目前为止所做的:

import Foundation

class WidgetData {

  var id: Int64?
  var name: String
  var entered : String
  var address: String

  var formid : Int64?
  var formname : String
  var formdescription : String
  var formcategory : String

  init(id: Int64) {
      self.id = id
      name = ""
      entered = ""
      address = ""
  }

  init(formid: Int64) {
      self.formid = formid
      formname = ""
      formdescription = ""
      formcategory = ""
  }

  init(id: Int64, name: String, entered: String, address: String) {
      self.id = id
      self.name = name
      self.entered = entered
      self.address = address
  }

  init(formid: Int64, formname : String, formdescription : String, formcategory : String) {
      self.formid = formid
      self.formname = formname
      self.formdescription = formdescription
      self.formcategory = formcategory
   }
}

【问题讨论】:

    标签: ios swift initialization


    【解决方案1】:

    问题在于以下属性:

    var name: String
    var entered : String
    var address: String
    var formname : String
    var formdescription : String
    var formcategory : String
    

    不是可选的,所以它们必须是initialized:

    在创建该类或结构的实例时,类和结构必须将其所有存储的属性设置为适当的初始值。存储的属性不能处于不确定状态。

    您可以在初始化程序中为存储的属性设置初始值,或者通过将默认属性值分配为属性定义的一部分。

    因此您可以为它们分配一个默认值,因此您的代码可能是:

    import Foundation
    
    class WidgetData {
        var id: Int64?
        var name: String = ""
        var entered : String = ""
        var address: String = ""
    
        var formid : Int64?
        var formname : String = ""
        var formdescription : String = ""
        var formcategory : String = ""
        
        init(id: Int64) {
            self.id = id
        }
        
        init(formid: Int64) {
            self.formid = formid
        }
        
        init(id: Int64, name: String, entered: String, address: String) {
            self.id = id
            self.name = name
            self.entered = entered
            self.address = address
        }
        
        init(formid: Int64, formname : String, formdescription : String, formcategory : String) {
            self.formid = formid
            self.formname = formname
            self.formdescription = formdescription
            self.formcategory = formcategory
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-06-22
      • 2017-12-31
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      • 2017-01-07
      • 2021-06-28
      相关资源
      最近更新 更多