Swift 2のAlamofireの新しいバージョンについて質問があります
Alamofire.request(.POST, urlString, parameters: parameters as? [String : AnyObject])
.responseJSON { (request, response, result) -> Void in
let dico = result as? NSDictionary
for (index, value) in dico! {
print("index : \(index) value : \(value)")
}
}
このセクションでは、結果をNSDictionaryにキャストします。しかし、コンパイルしてブレークポイントを置くと、デバッガーはdicoがnilであると言います。 debugDescriptionを使用して結果を出力する場合、nilではなく、期待したものが含まれています。Result変数をキャストするにはどうすればよいですか。
受け入れられた答えはうまく機能しますが、Alamofire 3.0.0の導入により、この実装に影響するいくつかの重大な変更があります。
移行ガイド にはさらに説明がありますが、実際のソリューションに関連するものを強調します。
また、応答の内容に関係なく、Alamofireが完了した要求を成功とみなすことも考慮してください。したがって、.validate()
の前に.responseJSON()
をチェーンして、_.Failure
_ケースをヒットする必要があります。詳細については こちら をご覧ください。
更新されたコード:
_let url = "http://api.myawesomeapp.com"
Alamofire.request(.GET, url).validate().responseJSON { response in
switch response.result {
case .Success(let data):
let json = JSON(data)
let name = json["name"].stringValue
print(name)
case .Failure(let error):
print("Request failed with error: \(error)")
}
}
_
参考のため:
SwiftyJSON libraryを使用してもかまわない場合は、Xcode 7 Beta 5 + Alamofire 2.0.0-beta.1 + SwiftyJSON(xcode7ブランチ)の実例があります。
Alamofire.request(.GET, url, parameters: params, encoding: ParameterEncoding.URL).responseJSON { (_, _, result) in
switch result {
case .Success(let data):
let json = JSON(data)
let name = json["name"].string
case .Failure(_, let error):
print("Request failed with error: \(error)")
}
}
編集:
SwiftyJSON gitページを更新