У меня есть пользовательский объект, который я хотел бы сохранить в данный момент для входа в систему, а также функции, которые позволят пользователю делать такие вещи, как выход из системы, и т. д.Расположение объекта пользователя в 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()
Однако я не совсем уверен, :
- ли я на правильном пути (это мой первый полный быстрое приложение)
- Если я, где поставить выше 2 строки кода (возможно, приложение D elegate?), так что, когда приложение открыто, пользователь в NSUserDefaults (если он есть) записывается в
- Как разрешить остальной доступ к приложению пользователю (я хотел бы иметь возможность иметь возможность ссылаться на пользовательские данные в контроллерах моего вида, например let pointsLabel.text = users.points)
Большое вам спасибо!
Спасибо Анни, это очень полезно! Предположительно, такие вещи, как имя пользователя, отлично подходят для NSUserDefaults, но что-то вроде токена аутентификации должно идти в keychain? – Ben
Да, вы можете хранить нечувствительную информацию (имя пользователя также отлично) в NSUserDefaults. –