我有一个用户对象,我想为它存储当前登录的用户,以及允许用户执行某些操作的函数,例如注销、登录等。
按照这里的各种教程和大量帖子,我想出了一些到目前为止在通过登录页面登录时运行良好的代码。这是代码:
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 中的用户(如果有)重新登录
- 如何允许应用程序的其余部分访问用户(我希望能够在我的 View Controller 中引用用户数据,例如让 pointsLabel.text = users.points)
提前致谢!
最佳答案
希望我的回答能帮助改进您的应用:
NSUserDefaults
不安全,可以在设备上和 Mac 上轻松打开和阅读。因此,用户默认值是存放首选项和配置信息的好地方,但不适合存放敏感信息,例如密码。检查link了解更多详情- 是的,它应该在应用委托(delegate)中。加载用户数据并相应地呈现 View 。
- 您可以将用户数据传递给 View Controller ,也可以只从持久存储中读取。取决于您的要求。
关于ios - iOS 中的用户对象位置 (swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33936469/