В настоящее время я пытаюсь вложить запросы Alamofire в использование данных, которые я уже получил с использованием запросов GET.Обратные вызовы вложенности Alamofire или возвращаемое значение для глобального использования
Для этого кусок кода, который я использовал ответ Роба в этом вопросе
How to return value from Alamofire
Однако, я не могу ни гнезда запросов Alamofire или использовать их по отдельности.
Это то, что я пытаюсь сделать
override func viewDidLoad() {
super.viewDidLoad()
var currentFoodType: String = ""
var currentFoodList: String = ""
//debug
//this is how I get back the token from NSUserDefault
if let myToken = userDefaults.valueForKey("token"){
// calling method to get the user info
getUserInfo(myToken as! String)
// calling method to get the product type
func getFoodCategory(completionHandler: (NSDictionary?, NSError?) ->()) {
getProductTypes(myToken as! String, completionHandler: completionHandler)
}
getFoodCategory() { responseObject, error in
// use responseObject and error here
let foodTypesJSON = JSON(responseObject!)
//to get one single food category
currentFoodType = (foodTypesJSON["types"][0].stringValue)
print(currentFoodType)
/////////////////////////////////////////
func getFoodsByCategory(completionHandler: (NSDictionary?, NSError?) ->()) {
print("getting " + currentFoodType)
self.getProductsByType(myToken as! String, productType: currentFoodType, completionHandler: completionHandler)
}
getFoodsByCategory() { responseObject, error in
// use responseObject and error here
print("responseObject = \(responseObject); error = \(error)")
return
}
return
}
}
Затем две других функций, я звоню оттуда очень прямой Alamofire запросы с обратными вызовами к completionHandlers выше
//GET THE PRODUCT TYPES FROM THE SERVER
func getProductTypes(myToken: String, completionHandler: (NSDictionary?, NSError?) ->()) {
let requestToken = "Bearer " + myToken
let headers = ["Authorization": requestToken]
let getProductTypesEndpoint: String = BASE_URL + PRODUCT_TYPES
Alamofire.request(.GET, getProductTypesEndpoint, headers: headers)
.responseJSON{ response in
switch response.result {
case .Success(let value):
completionHandler(value as? NSDictionary, nil)
case .Failure(let error):
completionHandler(nil, error)
}
}//END ALAMOFIRE GET responseJSON
}
выше функция возвращает единичную пищу, такую как «Десерты», которая будет использоваться в следующей функции для получения всех десертов с сервера
//GET THE PRODUCTS FROM THE SERVER GIVEN A CATEGORY
func getProductsByType(myToken: String, productType: String, completionHandler: (NSDictionary?, NSError?) ->()){
let requestToken = "Bearer " + myToken
let headers = ["Authorization": requestToken]
let getProductTypesEndpoint: String = BASE_URL + PRODUCT_BY_TYPE + productType
Alamofire.request(.GET, getProductTypesEndpoint, headers: headers)
.responseJSON { response in
switch response.result {
case .Success(let value):
print("no errors")
let auth = JSON(value)
print("The pbt GET description is: " + auth.description)
completionHandler(value as? NSDictionary, nil)
case .Failure(let error):
print("there was an error")
completionHandler(nil, error)
}
}//END ALAMOFIRE GET responseJSON
}
и это хорошо работает, потому что когда я печатаю внутри функции getProductsByType
с использованием
print("The pbt GET description is: " + auth.description)
Я получаю JSON со всеми продуктами , но проблема заключается в функции viewDidload где я вложенности обратные вызовы
getFoodsByCategory() { responseObject, error in
// use responseObject and error here
print("responseObject = \(responseObject); error = \(error)")
return
}
печати в пределах этого бита показывает меня что-то не так, поэтому я не могу разобрать свой ответ, как я желаю.
Потому что я получаю
responseObject = nil; error = nil
Так что я думаю, что там должен быть другой способ, чтобы гнездиться эти обратные вызовы?