Alamofire 在完成处理程序之外使用值
Alamofire using value outside completion handler
我使用 Alamofire 向服务器发出请求并使用完成处理程序从中获取数据,但我想使用它之外的一些值,是否可以这样做?
let retur = Json().login(userName: param1, password: param2) { (json) in
print(json)
let jsonDic = JSON(json)
for item in jsonDic["result"].arrayValue {
let token = item["ubus_rpc_session"].stringValue
}
print(jsonDic["result"][1]["ubus_rpc_session"].stringValue)
}
正如我在评论中提到的,您想在应用程序的任何地方访问您的令牌,您可以这样做:
为喜欢的人创建一个单独的class
import UIKit
class UserSettings: NSObject {
class func setAuthToken(authToken: String?) {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(authToken, forKey: "authToken");
}
class func getAuthToken() -> String? {
let defaults = NSUserDefaults.standardUserDefaults()
return defaults.stringForKey("authToken")
}
}
现在您可以这样设置令牌:
let token = item["ubus_rpc_session"].stringValue
UserSettings.setAuthToken(token)
您可以通过这种方式在应用程序的任何位置获取令牌:
if let token = UserSettings.getAuthToken() {
//do your stuff here with token
}
如果您想在 Alamofire 之外访问结果,请遵循以下代码。
override func viewDidLoad()
{
super.viewDidLoad()
let retur = Json().login(userName: param1, password: param2) { (json) in
print(json)
let jsonDic = JSON(json)
for item in jsonDic["result"].arrayValue
{
let token = item["ubus_rpc_session"].stringValue
self.myFunction(str: token)
}
print(jsonDic["result"][1]["ubus_rpc_session"].stringValue)
}
}
func myFunction(str: String)
{
//Here it will print token value.
print("Token value ====%@",str)
}
方案二:
这里我将使用 NSUserDefault,要了解更多信息,您可以搜索它,google 上有多个示例可用。
现在在这里,我们将使用 NSUserDefault。
//Use below code in alamofire block to save token value.
let defaults = UserDefaults.standard
defaults.set(token, forKey: "tokenValue")
//Use below code to print anywhere.
let defaults = UserDefaults.standard
if let myToken = defaults.value(forKey: "tokenValue") as? String
{
print("defaults savedToken: \(myToken)")
}
希望对你有用。
更多详情可以参考这个回答
我使用 Alamofire 向服务器发出请求并使用完成处理程序从中获取数据,但我想使用它之外的一些值,是否可以这样做?
let retur = Json().login(userName: param1, password: param2) { (json) in
print(json)
let jsonDic = JSON(json)
for item in jsonDic["result"].arrayValue {
let token = item["ubus_rpc_session"].stringValue
}
print(jsonDic["result"][1]["ubus_rpc_session"].stringValue)
}
正如我在评论中提到的,您想在应用程序的任何地方访问您的令牌,您可以这样做:
为喜欢的人创建一个单独的class
import UIKit
class UserSettings: NSObject {
class func setAuthToken(authToken: String?) {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(authToken, forKey: "authToken");
}
class func getAuthToken() -> String? {
let defaults = NSUserDefaults.standardUserDefaults()
return defaults.stringForKey("authToken")
}
}
现在您可以这样设置令牌:
let token = item["ubus_rpc_session"].stringValue
UserSettings.setAuthToken(token)
您可以通过这种方式在应用程序的任何位置获取令牌:
if let token = UserSettings.getAuthToken() {
//do your stuff here with token
}
如果您想在 Alamofire 之外访问结果,请遵循以下代码。
override func viewDidLoad()
{
super.viewDidLoad()
let retur = Json().login(userName: param1, password: param2) { (json) in
print(json)
let jsonDic = JSON(json)
for item in jsonDic["result"].arrayValue
{
let token = item["ubus_rpc_session"].stringValue
self.myFunction(str: token)
}
print(jsonDic["result"][1]["ubus_rpc_session"].stringValue)
}
}
func myFunction(str: String)
{
//Here it will print token value.
print("Token value ====%@",str)
}
方案二:
这里我将使用 NSUserDefault,要了解更多信息,您可以搜索它,google 上有多个示例可用。
现在在这里,我们将使用 NSUserDefault。
//Use below code in alamofire block to save token value.
let defaults = UserDefaults.standard
defaults.set(token, forKey: "tokenValue")
//Use below code to print anywhere.
let defaults = UserDefaults.standard
if let myToken = defaults.value(forKey: "tokenValue") as? String
{
print("defaults savedToken: \(myToken)")
}
希望对你有用。
更多详情可以参考这个回答