Almofire.request
비동기 기능입니다. 당신은 그것을 부르면 즉시 돌아올 것입니다. 실제로 요청을하기 전에 따라서 println(data)
이 호출되기 전에 을 nil
으로 설정하기 전에 호출됩니다. 요청이 실제로 완료되면 그 폐쇄가 실제로 data
를 사용하려면 볼 수있는 곳입니다 (그것을 인쇄 또는 무엇이든)에서, Alamofire, 당신은 responseJSON
에 전달 폐쇄를 호출합니다 :에서
Alamofire.request(.POST, "http://localhost/api/notifications", parameters: parameters)
.responseJSON { (request, response, JSON, error) in
let data: AnyObject? = JSON
// do something useful with data
println(data)
}
질문 덧글 :
하지만 그 데이터를 표로 바꾸고 싶다고 말하면됩니다. 클로저에 모든 테이블 코드를 넣을 수 있습니까?
당신 은 폐쇄 내부의 모든 코드를 넣을 수 있지만, 아마 꽤 빨리 혼란스러워 할 것이다. 이를 처리하는 더 좋은 방법은 Alamofire.request
이 사용하는 것과 같은 종류의 패턴을 구현하는 것입니다. 기본적으로 자신의 함수가 클로저를 매개 변수로 사용하도록 요청합니다. 그런 다음 닫음에서 responseJSON
으로 전달하고 함수에 전달 된 클로저를 호출하여 data
을 전달합니다. 그런 다음 "데이터를 표로 바꾸기"위한 별도의 기능을 만들고 클로저에서 data
으로 호출하십시오. 이런 식으로 뭔가 :
func callSomeAPI(resultHandler: (data: AnyObject?) ->()) ->() {
Alamofire.request(.POST, "http://localhost/api/notifications", parameters: parameters)
.responseJSON { (request, response, JSON, error) in
let data: AnyObject? = JSON
resultHandler(data)
}
}
func makeTable(data: AnyObject?) ->() {
// make your table
}
callSomeAPI() { data in
makeTable(data)
}
참고 : 당신은 아마 거기에 어떤 점에서 AnyObject?
이외의 다른 data
을 변환 할 수 있습니다.
그렇다면'.responseJSON' 이외의'data' 상수에 접근 할 수 없다는 말입니까? ... – user302975
실제로 액세스 할 수 없다는 것은 아닙니다. 설정되지 않을 것입니다. 'responseJSON'에 전달 된 클로저가 호출 될 때까지. 요청은 비동기 적으로 이루어 지므로 현재 '데이터'는 호출하려고 할 때 설정되지 않습니다.설정 후에 '데이터'(인쇄 이외의 다른 작업)로하고 싶은 작업에 대해 더 많이 알고 있다면 올바른 방향으로 안내 할 수 있습니다. –
'data'는 JSON 응답입니다. 나는 JSON을 가져 와서 그것을 "예쁜"것으로 만들고 싶다. 'Name : Bob','Age : 22'와 비슷합니다. '{-data : [Name : Bob, Age : "22"]}'이해합니까? – user302975