2016-07-27 2 views
1

그래서 API 끝점에서받은 JSON 개체를 반환해야하는 함수가 있습니다. 어떤 이유로이 함수는 항상 response.result.value를 인쇄 할 때 API 응답을 완벽하게 포함하고 return 문을 지정하는 if 문을 입력하더라도 항상 nil을 반환합니다. 어떤 의견을 부탁드립니다!스위프트 : 반환 형식 JSON 함수

func storeContact(name: String, number: String, apiToken: String) -> AnyObject? { 

var returnJSON: AnyObject? 

let contact = ["api_token" : apiToken, "name" : name, "number": number] 

Alamofire.request(.POST, "http://sample.app/api/v1/contact", parameters: contact, encoding: .JSON).responseJSON { (response) -> Void in 

    if let value = response.result.value { 

     returnJSON = value 

    } 
} 

return returnJSON 

} 
+3

왜 사전에 JSON을 구문 분석하고 사전을 반환하지 않습니다? 또한 POST 요청에서 결과를 받기 전에'returnJSON'을 리턴합니다. 그러므로 그것은 nil입니다. 블록을 사용하십시오. – NSNoob

+0

Alamofire와 함께 [Swait Closure with Network requests] 사용 방법보기 (0120-337-331) – NSNoob

답변

2

인터넷 페치는 항상 몇 번 필요하기 때문에 비동기 호출을 사용합니다. 완료 블록 Alamofire.request 항상 후 호출storeContact 값을 반환합니다. 그것의이 상황에서 클로저를 사용하는 것이 일반적 :

func storeContact(name: String, number: String, apiToken: String, completeonClosure: (AnyObject?) ->()) { 
    let contact = ["api_token" : apiToken, "name" : name, "number": number] 

    Alamofire.request(.POST, "http://sample.app/api/v1/contact", parameters: contact, encoding: .JSON).responseJSON { 
     response in 
     completeonClosure(response.result.value) 
    } 
} 

사용법 :

storeContact("name", number: "number", apiToken: "apiToken") { 
    returnJSON in 
    print(returnJSON) 
} 
+1

전설, 그 덕분에 고맙습니다! – frostfat