2017-02-06 9 views
2

Я сделал запрос на сервер с Alamofire и получил данные от него с обработчиком завершения, но я хочу использовать какое-то значение вне его, можно ли это сделать?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) 

} 
+0

Вы могли бы вы класс свойство (Объявить Var фишку как класс собственность), чтобы сохранить это значение в блоке завершения и использовать другое место, и вы могли бы написать делегат. –

+0

Как я понимаю из вашего кода вы хотите сохранить токен и получить доступ к нему повсюду в приложении? –

+0

Да, вы правы –

ответ

3

Если вы хотите получить доступ к результатам за пределами 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)") 
     } 

Надеюсь, что это сработает для вас.

Для получения более подробной информации Вы можете обратиться этим ответ https://stackoverflow.com/a/41899777/5886755

+1

Спасибо, я пробовал путь с Userdefaults, и он работает, но мне также нужен второй способ, поэтому я собирается использовать его позже. –

+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) 

и вы получите маркер в любой точке приложения следующим образом:

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

Я пробовал этот путь, и он работает, спасибо –

+0

Рад помочь вам .. :) –

 Смежные вопросы

  • Нет связанных вопросов^_^