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

Posted

技术标签:

【中文标题】从初始化程序返回而不初始化所有存储的属性swift ios【英文标题】:Return from initializer without initializing all stored properties 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
   

【问题讨论】:

【参考方案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
    

【讨论】:

以上是关于从初始化程序返回而不初始化所有存储的属性swift ios的主要内容,如果未能解决你的问题,请参考以下文章

未初始化从初始化程序返回的所有存储属性的错误[重复]

在 Swift 中将存储属性添加到 NSManagedObject 的子类

Swift:在从初始化程序返回之前,不会在所有路径上调用“super.init”?

如何将 JSON 解码为不同的类型?

SwiftUI:列表的背景颜色不变

swift学习笔记构造过程