Swift Alamofire在完成处理程序外部使用值

Swift Alamofire在完成处理程序外部使用值,swift,xcode,closures,alamofire,completionhandler,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 =

我使用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)

}

正如我在评论中提到的,您希望在应用程序中的任何地方访问您的令牌,您可以通过以下方式进行访问:

let token = item["ubus_rpc_session"].stringValue
UserSettings.setAuthToken(token)
if let token = UserSettings.getAuthToken() {
    //do your stuff here with token
}
为该类创建一个单独的类

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
}
您可以通过以下方式在应用程序中的任何位置获取令牌:

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)
         }
解决方案2:

在这里,我将使用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)")
        }
希望对你有用


有关更多详细信息,您可以参考此答案

您可以使用类属性(将Var token声明为类属性)将该值保存在完成块中并使用其他位置,也可以编写一个委托。正如我从您的代码中了解到的,您希望保存token并在应用程序中的任何位置访问它,对吗?是的,您是对的,谢谢,我用Userdefaults尝试了这种方法,它很有效,但我还需要第二种方法,所以我稍后将使用它。很高兴能帮助您……)