2017-05-05 7 views
-1

저는 스위프트 3에 대해 매우 익숙하며 API에서 GET 요청을해야합니다. 비동기 함수를 사용하는 Alamofire를 사용하고 있습니다.스레드 1 : signal SIGABRT alamofire

나는 내 안드로이드 응용 프로그램에 정확히 동일한 작업을 수행하고, GET은 JSON 데이터

이 신속 내 코드를 반환 : "고해상도 = 응답을

 func getValueJSON() -> JSON { 
     var res = JSON({}) 
     let myGroup = DispatchGroup() 
     myGroup.enter() 
     Alamofire.request(url_).responseJSON { response in 
      res = response.result.value as! JSON 
      print("first result", res) 
      myGroup.leave() 
     } 
     myGroup.notify(queue: .main) { 
      print("Finished all requests.", res) 
     } 
     print("second result", res) 
     return res 
    } 

을하지만 라인에 문제가 .result.value "나에게 오류를 제공합니다 : 스레드 1 : 신호 SIGABRT

정말 어디에서 문제가 온다 이해가 안 돼요," "동기 기능을 수행하기 꽤 힘들었어요, 아마도 내가 그것을하고 있어요 잘못된.

내 목표는 내가 반환하는 변수에 요청 결과를 저장하는 것입니다. 누구든지 도울 수 있니?

답변

0

Alamofire를 SwiftyJSON과 함께 사용하면 JSON을 더 쉽게 파싱 할 수 있기 때문에 사용하는 것이 좋습니다.

다음은 고전적인 예입니다 : 당신이 parameters, 또는 headers을 통과 단지 request 방법을 추가해야하는 경우

Alamofire.request("http://example.net", method: .get).responseJSON { response in 
    switch response.result { 
    case .success(let value): 
     let json = JSON(value) 
     print("JSON: \(json)") 
    case .failure(let error): 
     print(error) 
    } 
} 

.

let headers: HTTPHeaders = [ 
     "Content-Type:": "application/json" 
] 

let parameters: [String: Any] = [ 
     "key": "value" 
] 

그래서 귀하의 요청은 다음과 같이 (이 POST 요청입니다)입니다 :

Alamofire.request("http://example.net", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { response in 

switch response.result { 

     case .success(let value): 
      print(value) 
     case .failure(let error): 
      print(error) 
    } 
} 

나는 그것을 테스트하지 않은,하지만 그것을 작동합니다. 또한 HTTP 프로토콜을 통한 요청을 허용하려면 allow arbitary loadyes (App Transport Security Settings : info.plist)으로 설정해야합니다.

권장하지 않지만 개발에는 적합합니다.

+0

괜찮아 보이지만 루프에서 선언 한 변수를 어떻게 반환 할 수 있습니까? 다른 곳에서 선언 할 때 스레드 오류가 있습니다. –

+0

보통 클래스 속성을 선언합니다. '''var results : JSON = []'''그리고 아래에서는''''sucess (let value)'''에'''self.results = JSON (value)''를 추가합니다. 나중에 사용하십시오. 그러나 이것은''SwiftyJSON'''을 필요로합니다. – Nedim

+0

하지만 비동기 적으로 인쇄 후에 요청이 끝나기 때문에 변수를 저장할 수 없습니다. 세마포어는 어떻게 설정 하시겠습니까? 아니면 뭔가 다른 걸까요? –

관련 문제