继承我的班级层次结构:
class Parent {
var name: String
var age: Int
init(dict: [String: Any]) {
age = dict["age"] as! Int
}//ERROR: "Return from initializer without initializing all stored properties"
}
class Child: Parent {
var school: String
override init(dict: [String: Any]) {
school = dict["school"] as! String
super.init(dict: dict)
name = dict["childname"] as! String
}
}
如果我在name
初始化程序中初始化Parent
属性,那么它正在运行,但在我的情况下,我希望它仅在Child
初始化。
有没有办法解决这个问题?
P.S。 Parent
中有很多属性,例如name
,应该在Child
初始化
答案 0 :(得分:2)
Class/Struct
属性不能为nil / null。您必须在声明时或Class/Struct
Class/Struct's
内初始化initializers
属性。如果您希望属性保持为nil / null并希望以后填充它们,则必须将变量/引用声明为Optional。
在您的情况下,将name
类的Parent
变量设为Optional
,如var name: String?
。
class Parent {
var name: String?
var age: Int
init(dict: [String: Any]) {
age = dict["age"] as! Int
}
}
class Child: Parent {
var school: String
override init(dict: [String: Any]) {
school = dict["school"] as! String
super.init(dict: dict)
name = dict["childname"] as! String
}
}
let dict: [String: Any] = ["childname":"Mamun", "school":"school name",
"age": 12]
let child = Child(dict: dict)
print("Child name: \(child.name!)")