从初始化程序返回而不初始化所有存储的属性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 的子类