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

User object location in iOS (swift)

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

按照这里的各种教程和大量帖子,我想出了一些代码,这些代码到目前为止在通过登录页面登录时运行良好。这是代码:

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()

不过我不太确定:

在此先感谢您!

希望我的回答能帮助您改进应用:

  1. NSUserDefaults 不安全,可以在设备上和 Mac 上轻松打开和阅读。因此,用户默认值是存放首选项和配置信息的好地方,但不适合存放敏感信息,例如密码。查看 link 了解更多详情
  2. 是的,它应该在应用委托中。加载用户数据并相应地呈现视图。
  3. 您可以将用户数据传递给视图控制器,也可以只从持久存储中读取。取决于您的要求。