在 swift class 中没有初始化错误
Getting no initialisation error in swift class
大家好,我是 swift 的新手,我是一个字符串,用于将用户凭据存储在 LoginViewController 中的结构对象中的用户默认值中。下面是我的代码,
class User: NSObject {
//MARK: Properties
var name: String
var email: String
var loginData: LoginData
//MARK: Initialization
init(name: String, email:String, loginData: LoginData) {
self.name = name
self.email = email
self.loginData = loginData
}
}
这里的LoginData是一个结构体
struct LoginData {
var username: String
var password: String
}
在提交注册数据时,我将值分配为
let logindata = LoginData (username: username, password: password)
let v = User(name: nameval, email: emailval, loginData:logindata)
在 LoginViewContoller 中,我有一个切换按钮,用于将用户凭据保存到我创建的 NSUserdefaults
var logindataValue: LoginData
并在用户默认值中存储如下
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(logindataValue.username, forKey: "username")
defaults.setObject(logindataValue.password, forKey: "password")
defaults.synchronize()
但在 LoginViewController 中 class 显示错误“LoginViewController 没有初始化程序”
如何防止这个错误?在这种情况下,这是正确的做法吗?
Swift 抱怨您没有在 LoginViewContoller
中初始化 var logindataValue: LoginData
。您可以通过几种方法解决这个问题。
- 使
logindataValue
成为Optional
:
在您的 LoginViewController
中,将 logindataValue
的定义更改为:
var logindataValue: LoginData?
它会被赋予一个默认的初始值nil
。使用时必须拆开包装,但没关系。
- 给
logindataValue
一个不同的默认值:
在您的 LoginViewController
中,将 logindataValue
的定义更改为:
var logindataValue = LoginData(username: "", password: "")
我不推荐这种方法。创建一个具有无意义值的空 LoginData
对象似乎是不对的。最好使用 Optional
值。但是,如果您可以提供一些其他有意义的默认值,那么这可能会起作用。
- 为
LoginViewController
添加初始化程序:
这是最复杂的,因为为 UIViewController
的子类创建自定义初始化程序并不容易。您将必须添加一个包含 logindataValue
参数的初始化程序,您可以使用该参数来初始化 logindataValue
。但是您还必须覆盖 init?(coder: NSCoder)
,这对您来说是一种痛苦,而且可能不是您所需要的。
所以我的建议是 logindataValue
变成 Optional
。
大家好,我是 swift 的新手,我是一个字符串,用于将用户凭据存储在 LoginViewController 中的结构对象中的用户默认值中。下面是我的代码,
class User: NSObject {
//MARK: Properties
var name: String
var email: String
var loginData: LoginData
//MARK: Initialization
init(name: String, email:String, loginData: LoginData) {
self.name = name
self.email = email
self.loginData = loginData
}
}
这里的LoginData是一个结构体
struct LoginData {
var username: String
var password: String
}
在提交注册数据时,我将值分配为
let logindata = LoginData (username: username, password: password)
let v = User(name: nameval, email: emailval, loginData:logindata)
在 LoginViewContoller 中,我有一个切换按钮,用于将用户凭据保存到我创建的 NSUserdefaults
var logindataValue: LoginData
并在用户默认值中存储如下
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(logindataValue.username, forKey: "username")
defaults.setObject(logindataValue.password, forKey: "password")
defaults.synchronize()
但在 LoginViewController 中 class 显示错误“LoginViewController 没有初始化程序”
如何防止这个错误?在这种情况下,这是正确的做法吗?
Swift 抱怨您没有在 LoginViewContoller
中初始化 var logindataValue: LoginData
。您可以通过几种方法解决这个问题。
- 使
logindataValue
成为Optional
:
在您的 LoginViewController
中,将 logindataValue
的定义更改为:
var logindataValue: LoginData?
它会被赋予一个默认的初始值nil
。使用时必须拆开包装,但没关系。
- 给
logindataValue
一个不同的默认值:
在您的 LoginViewController
中,将 logindataValue
的定义更改为:
var logindataValue = LoginData(username: "", password: "")
我不推荐这种方法。创建一个具有无意义值的空 LoginData
对象似乎是不对的。最好使用 Optional
值。但是,如果您可以提供一些其他有意义的默认值,那么这可能会起作用。
- 为
LoginViewController
添加初始化程序:
这是最复杂的,因为为 UIViewController
的子类创建自定义初始化程序并不容易。您将必须添加一个包含 logindataValue
参数的初始化程序,您可以使用该参数来初始化 logindataValue
。但是您还必须覆盖 init?(coder: NSCoder)
,这对您来说是一种痛苦,而且可能不是您所需要的。
所以我的建议是 logindataValue
变成 Optional
。