从 NSObject 继承的对象导致错误 属性 'self._username' 未在 super.init 调用时初始化
Object inherit from NSObject causes error Property 'self._username' not initialized at super.init call
我创建了继承自 NSObject 的 UserModel 对象。由于 "Property 'self._username' not initialized at super.init call",我在重写 init() 时遇到问题,给我错误。有人可以告诉我如何解决吗?我还应该始终继承 NSObject 吗?
class UserModel:NSObject
{
let _username:String
let _password:String
let _isAuthenticated:Bool
let _isManager:Bool
init(username:String = "",password:String = "" ,isAuthenticated:Bool = false,isManager:Bool = false)
{
self._username = username
self._password = password
self._isAuthenticated = isAuthenticated
self._isManager = isManager
}
override init() {
super.init()
}
}
在Swift中,只有可选类型可以包含nil。您要么必须使用空字符串初始化您的用户名 属性,要么使用可选类型
let _username: String?
或
let _username: String = ""
您的 _username
、_password
、_isAuthenticated
和 _isManager
变量不是可选的。一旦初始化程序完成,它们必须有一个值。您的第二个初始化程序对 super.init()
的调用没有给它们一个值,您的初始化程序的其余部分(即什么也没有)也没有。
所以如果我说:let userModel = UserModel()
,变量的值是多少?没有值,但它们不是可选的,因此必须有值。编译器指出了这个矛盾。
您不必继承 NSObject,除非有必要,否则您不应该继承。
- 你绝对不必须总是继承自
NSObject
!
class UserModel { ... }
也很好
- 错误的出现是因为当您尝试调用
super.init
时,必须正确设置 self
。 And 在 init()
完成后你的 class 成员没有任何值!对于非可选类型,两者都不允许。
解决方案:删除 init()
甚至 NSObject
继承:
class UserModel {
let _username : String
let _password : String
let _isAuthenticated : Bool
let _isManager : Bool
init(username : String = "", password : String = "", isAuthenticated : Bool = false, isManager : Bool = false) {
self._username = username
self._password = password
self._isAuthenticated = isAuthenticated
self._isManager = isManager
}
}
旁注:为什么你的变量有一个前导下划线?
我创建了继承自 NSObject 的 UserModel 对象。由于 "Property 'self._username' not initialized at super.init call",我在重写 init() 时遇到问题,给我错误。有人可以告诉我如何解决吗?我还应该始终继承 NSObject 吗?
class UserModel:NSObject
{
let _username:String
let _password:String
let _isAuthenticated:Bool
let _isManager:Bool
init(username:String = "",password:String = "" ,isAuthenticated:Bool = false,isManager:Bool = false)
{
self._username = username
self._password = password
self._isAuthenticated = isAuthenticated
self._isManager = isManager
}
override init() {
super.init()
}
}
在Swift中,只有可选类型可以包含nil。您要么必须使用空字符串初始化您的用户名 属性,要么使用可选类型
let _username: String?
或
let _username: String = ""
您的 _username
、_password
、_isAuthenticated
和 _isManager
变量不是可选的。一旦初始化程序完成,它们必须有一个值。您的第二个初始化程序对 super.init()
的调用没有给它们一个值,您的初始化程序的其余部分(即什么也没有)也没有。
所以如果我说:let userModel = UserModel()
,变量的值是多少?没有值,但它们不是可选的,因此必须有值。编译器指出了这个矛盾。
您不必继承 NSObject,除非有必要,否则您不应该继承。
- 你绝对不必须总是继承自
NSObject
!
class UserModel { ... }
也很好
- 错误的出现是因为当您尝试调用
super.init
时,必须正确设置self
。 And 在init()
完成后你的 class 成员没有任何值!对于非可选类型,两者都不允许。
解决方案:删除 init()
甚至 NSObject
继承:
class UserModel {
let _username : String
let _password : String
let _isAuthenticated : Bool
let _isManager : Bool
init(username : String = "", password : String = "", isAuthenticated : Bool = false, isManager : Bool = false) {
self._username = username
self._password = password
self._isAuthenticated = isAuthenticated
self._isManager = isManager
}
}
旁注:为什么你的变量有一个前导下划线?