나는 많은 방법을 시도해보고 stackoverflow와 검색을 하지만 나는 내가 원하는 것을 얻을 수있는 행운이 없다.iOS의 여러 위치에서 응답 사용
간단히 말해 나는 API를 요청한 응답을 변수 에 저장하여 자유롭게 사용할 수 있습니다.
여기에 코드
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var responseLabel: UILabel!
let apiUrlStr = "http://jsonplaceholder.typicode.com/posts"
var resData = NSArray()
override func viewDidLoad() {
super.viewDidLoad()
request(.GET, apiUrlStr, encoding: .JSON).responseJSON { (_, _, JSON, _) in
let arr = JSON as NSArray
let user = arr[0] as NSDictionary
self.responseLabel.text = user.objectForKey("title") as? String
self.resData = JSON as NSArray //i cant get this from outside
}
println(resData) //prints nothing but empty parentheses while inside the request it prints the data right
}
}
내가 여러 클래스가 모든 클래스가 나는 응답을 반환하는 응답 방법과 API를 클래스를 만들려면 다른 방법으로 응답을 처리해야하기 때문이다. 이 아마도 같은
는뭔가 :
class api{
func req(url: String, params: NSDictionary){
//method goes here
}
func res() -> NSDictionary{
//method goes here
var response = NSDictionary()
return response
}
}
다음
의 viewDidLoad
let params = ["aaa","bbb"]
let api = api()
api.req(apiUrlStr, params)
let res = api.res()
이 같이 사용할 수 *** 내가 지금 사용하고 요청 방법은 Alamofire.swift에서이다 그런데 나는 다른 방법을 사용하여 마음을 먹지 않는다.
여기는 행운을 따라 가려고했던 게시물과 사이트의 일부이다.
,515,proper-way-to-pull-json-api-resoponse
방법만을 내부에서 동일한 결과 응답의 모든 리드.
이 솔루션은 여전히 내 문제를 해결하지 못했습니다. 응답 코드 내에서 (handleResponse)가 호출되었지만 viewdidload에서 액세스 할 때 (self.resData) 여전히 비어 있기 때문에 여전히 다른 함수의 응답에 액세스 할 수 없습니다. – iEmad
더 구체적으로 어떻게 데이터를 반환 한 후 println (resData)을 호출 할 수 있습니까? – iEmad
설명 된대로 데이터가 반환 된 후에 println (resData)을 호출 할 수 있습니다. 서버가 응답하기를 기다리는 동안 모든 프로그램 실행을 차단하지 않으면 viewDidLoad 메서드에서이 작업을 수행 할 수 없습니다.이것은 나쁜 생각입니다 (예 : 서버가 느린 네트워크 연결을 통해 응답하는 데 오랜 시간이 걸릴 수 있음). https://github.com/Alamofire/Alamofire#response-handling을 읽고 비동기 프로그래밍에 대해 읽어 보시기 바랍니다. – pauln