Alamofire使用完成处理程序之外的值

时间:2017-02-06 07:03:44

标签: swift xcode closures alamofire completionhandler

我向服务器发出了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)

}

2 个答案:

答案 0 :(得分:1)

正如我在评论中提到的那样,你想在应用程序的任何地方访问你的令牌,你可以这样做:

为此创建一个单独的类

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)

你可以通过这种方式在app中获得令牌:

if let token = UserSettings.getAuthToken() {
    //do your stuff here with token
}

答案 1 :(得分:1)

如果您想访问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)
         }

解决方案2:

我在这里使用NSUserDefault,了解更多关于它的信息,谷歌可以提供多个例子。

现在,我们将使用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)")
        }

希望它适合你。

有关详细信息,请参阅此答案https://stackoverflow.com/a/41899777/5886755