在swift类中没有获取初始化错误

在swift类中没有获取初始化错误,swift,class,struct,initialization,nsuserdefaults,Swift,Class,Struct,Initialization,Nsuserdefaults,Hi我是swift新手我是字符串,用于在LoginViewController中的结构对象中以用户默认值存储用户凭据。下面是我的代码 class User: NSObject { //MARK: Properties var name: String var email: String var loginData: LoginData //MARK: Initialization init(name: String, email:String,

Hi我是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
    }
}
这里的Loginda是一个结构

struct LoginData {
    var username: String
    var password: String
}
在提交寄存器数据时,am将值分配为

let logindata = LoginData (username: username, password: password)        
let v = User(name: nameval, email: emailval, loginData:logindata)
在LoginViewContoller中,我有一个开关按钮,用于将用户凭据保存到我创建的NSUserDefault

var logindataValue: LoginData
并存储在用户默认值中,如下所示

let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(logindataValue.username, forKey: "username")
defaults.setObject(logindataValue.password, forKey: "password")
defaults.synchronize()
但在LoginViewController类中,显示错误为“LoginViewController没有初始值设定项”


如何防止这种错误?在这种情况下,这是正确的方法吗?

斯威夫特抱怨您没有在您的
LoginViewContoller
中初始化
var-logindavalue:LoginData
。你可以用几种方法来解决这个问题

  • 使
    loginDavalue
    成为
    可选的
  • LoginViewController
    中,将
    loginDavalue
    的定义更改为:

    var logindataValue: LoginData?
    
    var logindataValue = LoginData(username: "", password: "")
    
    它的默认初始值为
    nil
    。当你使用它的时候,你必须把它打开,但是没关系

  • loginDavalue
    一个不同的默认值:
  • LoginViewController
    中,将
    loginDavalue
    的定义更改为:

    var logindataValue: LoginData?
    
    var logindataValue = LoginData(username: "", password: "")
    
    我不推荐这种方法。使用无意义的值创建空的
    loginda
    对象似乎是不对的。最好使用
    可选值。但是,如果您可以提供一些其他有意义的默认值,那么这可能会起作用

  • LoginViewController
    添加初始值设定项:
  • 这是最复杂的,因为为
    UIViewController
    的子类创建自定义初始值设定项并不容易。您必须添加一个初始值设定项,该初始值设定项包含可用于初始化
    logindavalue
    logindavalue
    参数。但是,您还必须重写
    init?(coder:NSCoder)
    ,这是一种痛苦,因为您知道您需要什么,但可能不知道您需要什么


    因此,我的建议是将
    LoginDavalue
    设置为
    可选的

    您提供了许多关于各种模型对象的不相关数据,但对于实际出现错误的类
    LoginViewController
    ,几乎没有包含任何内容。我猜它不见了,因为它可能“太大了”,这意味着你甚至没有试着做一个测试。但是如果你想要一些关于Swift初始值设定的相关阅读资料,我建议你。。。。或创建一个初始值设定项。