2

Hi guys I've been searching the net without much luck but I'm trying to get around Alamofires asynchronous nature. I'm trying to return the JSON response as a dictionary but Xcode is giving me "Dictionary is not convertible to 'Void'"

func homePageDetails(userName:String) -> (Dictionary<String,AnyObject>){
    let username = userName
    let hompePageDetails = Alamofire.request(.GET, "http://example.com/API/Bunch/GetHomePageDetails/\(username)/").responseJSON{(request, response, JSON, error) in
    print(JSON)
    var test = JSON as Dictionary<String,AnyObject>
    return test
    }
}

Any help would be greatly appreciated.

User4
  • 1,330
  • 2
  • 15
  • 18

1 Answers1

9

You are returning test: Dictionary<String,AnyObject> from closure and not from homePageDetails method. Closure return type is Void, thats why you get this error.

I haven't used Alamofire myself, but Alamofire.request seems like non-blocking call. If its so you cannot return from this function. You can use something like completion closure. Non tested concept:

func homePageDetails(userName:String, completion:(Dictionary<String,AnyObject>) -> Void) {
    let username = userName
    let hompePageDetails = Alamofire.request(.GET, "http://example.com/API/Bunch/GetHomePageDetails/\(username)/").responseJSON{(request, response, JSON, error) in
        print(JSON)
        var test = JSON as Dictionary<String,AnyObject>
        completion(test)
    }
}
Kirsteins
  • 27,065
  • 8
  • 76
  • 78