bestsource

Alarmofire.request().responseJ의 결과값을 취득하는 방법손, 스위프트2?

bestsource 2023. 2. 9. 22:02
반응형

Alarmofire.request().responseJ의 결과값을 취득하는 방법손, 스위프트2?

Alarmofire for Swift 2의 새로운 버전에 대해 질문이 있습니다.

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'가 0으로 표시됩니다.debugDescription을 사용하여 결과를 인쇄하면 0이 되지 않고 예상한 내용이 포함됩니다.결과 변수를 캐스팅하려면 어떻게 해야 합니까?

인정된 답변은 매우 효과적이지만 Alarmofire 3.0.0의 도입으로 이 구현에 영향을 미치는 몇 가지 획기적인 변경 사항이 있습니다.
이행가이드에 자세한 설명이 있습니다만, 실제 솔루션과 관련된 것을 강조하겠습니다.

  • 대답
    응답을 제외한 모든 응답 직렬화기는 일반 응답 구조를 반환합니다.

  • 응답 유형
    결과 유형이 NSData?를 저장하지 않는 이중 일반 유형으로 재설계되었습니다..Failure사례.

또한 Alamofire는 응답 내용에 관계없이 완료된 요청을 성공적으로 처리한다는 점도 고려하십시오.그래서 체인으로 a를 묶어야 합니다..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)")
    }
}

참조용:

  • Xcode 7.3 (스위프트 2.2)
  • Alarmofire 3.3.1
  • 스위프티 JSON 2.3.3

SwiftyJ를 사용해도 괜찮으시다면SON 라이브러리, 다음은 Xcode 7 베타 5 + Alarmofire 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 페이지

이제 SwiftyJ를 사용하지 않고도 필요한 대부분의 동작을 즉시 수행할 수 있습니다.예를 들어 SON.OAuthTokenResponse는 코드 가능한 단순한 구조입니다.Alarmofire 라이브러리 5.2.2에서는 'responseDecodable'을 사용하여 응답할 수 있습니다.

다음과 같은 구조를 말하는 경우:

struct OAuthTokenResponse : Codable
{
    var access_token:String?
    var token_type:String?
    var expires_in:Int?
    var scope:String?
}

그리고 네트워크 콜에서 (Alarmofire 사용)

let request = AF.request(identityUrl, method: .post, parameters: parameters, encoding: URLEncoding.httpBody)
    request
        .validate()
        .responseDecodable { (response:AFDataResponse<OAuthTokenResponse>) in
            
            switch response.result {
            case .success(let data):
                do {
                    let jwt = try decode(jwt: data.access_token!) // example
                    self.connected = true
                    print(jwt)
                } catch {
                    print(error.localizedDescription)
                    self.connected = false
                }
                
            case .failure(let error):
                    self.connected = false
                    print(error.localizedDescription)
            }
        
        }

위의 코드에서 성공 사례는 디코딩 가능한 프로토콜을 사용하여 JSON을 구조체로 자동으로 역직렬화합니다.에러가 발생하면, 대신에 에러 케이스가 히트 합니다.

언급URL : https://stackoverflow.com/questions/32018741/how-to-get-the-result-value-of-alamofire-request-responsejson-in-swift-2

반응형