2017-05-05 8 views
-1

私はSwift 3の新機能です。私はAPIでGETリクエストをしなければなりません。私は非同期関数を使用するAlamofireを使用しています。スレッド1:signal SIGABRT alamofire

私は私のAndroidアプリの上に正確に同じ操作を行い、そしてGETはJSONデータ

これは迅速で私のコードで返します。「RES =応答を

 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 loadyesApp Transport Security Settings in info.plist)に設定する必要があります。

これはお勧めしませんが、開発には問題ありません。

+0

私はループ内で宣言する変数を返すことはできますか?他の場所で宣言するとスレッドエラーが発生する –

+0

私は通常クラスプロパティを宣言します。 '' 'var result:JSON = []' ''以下では '' '' 'su.(' let value) ''の場合に '' 'self.results = JSON(value)' 'を追加するだけです。後でそれを使用してください。しかし、これには '' SwiftyJSON'''が必要です。 – Nedim

+0

しかし、非同期なので、私は印刷後に要求が終了するので、私は変数を格納できません。どのようにセマフォを設定しますか?多分何か他に? –

関連する問題