iOS中的用户对象位置(swift)

iOS中的用户对象位置(swift),ios,swift,nsuserdefaults,Ios,Swift,Nsuserdefaults,我有一个用户对象,我想为它存储当前登录的用户,并具有允许用户执行操作的功能,例如注销、登录等 根据各种教程和这里的大量帖子,我想出了一些代码,在通过登录页面登录时效果很好。这是代码: import Foundation import UIKit // define the protocol for using this class protocol LoginProtocol { func didRecieveLoginResponse(status: Bool, message: S

我有一个用户对象,我想为它存储当前登录的用户,并具有允许用户执行操作的功能,例如注销、登录等

根据各种教程和这里的大量帖子,我想出了一些代码,在通过登录页面登录时效果很好。这是代码:

import Foundation
import UIKit

// define the protocol for using this class
protocol LoginProtocol {
    func didRecieveLoginResponse(status: Bool, message: String?)
}

class User : APIControllerProtocol {
  var delegate: LoginProtocol
  var username: String?
  var company: String?
  var auth_token: String?
  // more properties here

  // initiate the class, must have a delegate as per the protocol
  init(delegate: LoginProtocol, username: String?, school: String?) {
    self.delegate = delegate
    if(username != nil) {
        self.username = username
        self.company = company

    }
  }

  // login using the API
  func login(password: String) {
    print("Logging in as " + username! + " - " + company!)
    UIApplication.sharedApplication().networkActivityIndicatorVisible = true
    let api = APIController(delegate: self)
    var postFields = [String: String]()
    postFields["username"] = username
    postFields["password"] = password
    postFields["company"] = company
    api.request("login",postData: postFields)
  }

  // API results were received, log in the user if appropriate
  func didRecieveAPIResults(originalRequest: String,apiResponse: APIResponse) {
    dispatch_async(dispatch_get_main_queue(), {
        if(apiResponse.status == true) {
            self.auth_token = details["auth_token"]
            // more properties here
            self.save_to_user_defaults()
            self.delegate.didRecieveLoginResponse(true, message:nil )
        } else {
            self.delegate.didRecieveLoginResponse(false, message:apiResponse.message )
        }
        UIApplication.sharedApplication().networkActivityIndicatorVisible = false
    })
  }

  // save the properties to user defaults
  func save_to_user_defaults() {
    let defaults = NSUserDefaults.standardUserDefaults()
    defaults.setObject(self.username, forKey: "username")
    defaults.setObject(self.company, forKey: "company")
    defaults.setObject(self.auth_token, forKey: "auth_token")
    // more properties here
  }

  // load the properties from user defaults
  func load_from_user_defaults() {
    let defaults = NSUserDefaults.standardUserDefaults()
    self.username = defaults.objectForKey("username") as? String
    self.company = defaults.objectForKey("company") as? String
    self.auth_token = defaults.objectForKey("auth_token") as? String
    // more properties here
  }
}
我的下一个阶段是通过NSUserDefaults登录用户-我的计划是通过以下方式:

let user = User()
user.load_from_user_defaults()
但我不太确定:

  • 我是否在正确的轨道上(这是我第一个完整的swift应用程序)
  • 如果我是,将上述两行代码(可能是应用程序代理?)放在哪里,这样当应用程序打开时,NSUserDefaults中的用户(如果有)将重新登录
  • 如何允许用户访问应用程序的其余部分(我希望能够在我的视图控制器中引用用户数据,例如,让pointsLabel.text=users.points)

提前非常感谢

希望,我的回答将有助于改进您的应用程序:

  • NSUserDefaults
    不安全,可以在设备和Mac上轻松打开和读取。因此,用户默认值是首选项和配置信息的好地方,但它不适合敏感信息,如密码。有关更多详细信息,请查看
  • 是的,它应该是应用程序内委托。加载用户数据并相应地显示视图
  • 您可以将用户数据传递给view controller,也可以只从持久存储中读取。这取决于你的要求

  • 谢谢你,安妮,这真的很有用!据推测,像用户名这样的东西在NSUserDefaults中很好,但是像身份验证令牌这样的东西应该放在密钥链中?是的,你可以在NSUserDefaults中存储非敏感信息(用户名也很好)。