我创建了从NSObject继承的UserModel对象我有覆盖init()的问题,因为"属性' self._username'没有在super.init call"初始化。谁有人告诉我如何解决它?我也应该总是继承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()
}
}
答案 0 :(得分:2)
NSObject
继承! class UserModel { ... }
完全没问题
super.init
self
时,必须正确设置。完成init()
后和您的班级成员没有任何价值!两者都不允许使用非可选类型。解决方案:删除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
}
}
旁注:为什么你的变量有一个前导下划线?
答案 1 :(得分:0)
在Swift中,只有可选类型可以包含nil。您必须使用空字符串初始化username属性或使用可选类型
let _username: String?
或
let _username: String = ""
答案 2 :(得分:0)
您的_username
,_password
,_isAuthenticated
和_isManager
变量不是可选的。初始化程序完成后,它们必须具有值。您的第二个初始化程序对super.init()
的调用不会给它们一个值,也不会给你的初始化程序的其余部分(即没有)。
所以,如果我说:let userModel = UserModel()
,那么变量的值是多少?没有值,但它们不是可选的,所以必须有值。编译器指出了这个矛盾。
你不必从NSObject继承,除非你有理由需要,否则你不应该这样做。