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

标签 ios swift initialization

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

Return from initializer without initializing all stored properties

但之前它运行成功。

我关注了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
   }
}

最佳答案

问题在于以下属性:

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

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

Classes and structures must set all of their stored properties to an appropriate initial value by the time an instance of that class or structure is created. Stored properties cannot be left in an indeterminate state.

You can set an initial value for a stored property within an initializer, or by assigning a default property value as part of the property’s definition.

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

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
    }
}

关于ios - 从初始化程序返回而不初始化所有存储的属性swift ios,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48582440/

相关文章:

ios - Int 不可转换为 DictionaryIndex<String, String>

ios - Firebase Messaging - 卸载不会阻止通知

ios - 捕获 View 的某个部分而不是整个 View

ios - 如果日期是一个月的开始,则获取当前周的所有日期返回不正确

Swift 3 Type 初始化导致泄漏

iOS IAP Error Domain=SKErrorDomain Code=2 in Production

ios - 云台 iOS SDK 错误

ios - 获取多个坐标之间的方向

c++ - 具有显式初始化程序的类的内存分配

java - 带扩展的初始化 block