2017-07-21 6 views
1

Swift 2.3からSwift 3.1までを使用していた既存のプロジェクトを変換しています。 これまでは、Xcodeの提案に従ってすべての変更を実装し、最新のPODを追加しました。Swift 2.3からSwift 3.1への移行 - Alamofireリクエストエラー

以下は例外ではありません。(これは既に存在するコードなので、何が行われているのかが部分的に分かりました)。

var request = ModifyProfileAddressAPIRequestData() 
request.clientContext = ClientContext() 
request.customer = AddressContext(address: CustomerAddress(countryName:countryName, countryCode: countryCode, locationName:locationName,houseNr: houseNr, streetName: streetName, postalCode:postalCode, box: box))   
request.fields = "customer.address" 
let parameters = request.toJSON() 

DDLogVerbose("modifyProfileURL parameters JSON:\(parameters)") 

alamofireConfigure().request(request).validate(statusCode: 200..<503).responseObject{ (responseData: DataResponse<UserProfile>) in 

... 

そしてModifyProfileAddressAPIRequestData以下のようにマップ可能な構造体である - - 私は Argument type 'ModifyProfileServiceAPIWithAlamofire.ModifyProfileAddressAPIRequestData' does not conform to expected type ' URLRequestConvertible '

としてalamofireConfigure要求でエラーが発生します

fileprivate struct ModifyProfileAddressAPIRequestData : Mappable{ 

    var customer: AddressContext? 
    var clientContext: ClientContext? 
    var fields:String? 

    init() {} 

    init?(map: Map) {} 

    mutating func mapping(map: Map) {   
     customer <- map["customer"] 
     clientContext <- map["clientContext"] 
     fields <- map["fields"] 
    }  
} 

は、私は以下の要求を持っています

My othe rのリクエストは、from hereという解決策に従うことで正常に変更され、問題なく動作します。

私の唯一の問題は、Mappableタイプのリクエストによるものです。これはSwift 2.3でうまくいきます。

誰かが実際に何が起こっているのかを明かすことができ、Swift 3.1で発生しているこの問題を解決するために何が必要なのでしょうか?

+0

エラーを返しましたか? – KKRocks

+0

はい、それは質問に記載されています - 'Argument type' ModifyProfileServiceAPIWithAlamofire.ModifyProfileAddressAPIRequestData 'が予想されるタイプ' URLRequestConvertible 'に適合しません。 –

答えて

0

がお役に立てば幸い必要があると思うURLRequestConvertibleに準拠するために、このメソッドを実装する必要があります私自身の質問。私は(元のコードのための私の質問を参照してください)

var request = URLRequest(url: URL(string: modifyProfileURL)!) 

       var data = ModifyProfileAddressAPIRequestData() 
       data.clientContext = ClientContext() 
       data.customer = AddressContext(address: CustomerAddress(countryName:countryName, countryCode: countryCode, locationName:locationName,houseNr: houseNr, streetName: streetName, postalCode:postalCode, box: box)) 
       data.fields = "customer.address" 
       let parameters = data.toJSONString() 

       request.httpBody = parameters?.data(using: .utf8) 
       request.httpMethod = "POST" 
       request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") 
       request.setValue("Bearer \(accessTokenRequest.accessToken)", forHTTPHeaderField: "Authorization") 


       alamofireConfigure() 
        .request(request) 
        .validate(statusCode: 200..<503) 
        .responseObject{ (responseData: DataResponse<UserProfile>) in 
. 
. 
. 

私は基本的にURLRequestのと私のデータを区別として、以下の要求を変更しました。したがって、Mappable Structは同じままです(私の質問と同じです)。

1

あなたはAlamofire.swift

/// Types adopting the `URLRequestConvertible` protocol can be used to construct URL requests. 
public protocol URLRequestConvertible { 
    /// Returns a URL request or throws if an `Error` was encountered. 
    /// 
    /// - throws: An `Error` if the underlying `URLRequest` is `nil`. 
    /// 
    /// - returns: A URL request. 
    func asURLRequest() throws -> URLRequest 
} 

を定義しているように私はあなたが

fileprivate struct ModifyProfileAddressAPIRequestData : Mappable,URLRequestConvertible{ 

    var customer: AddressContext? 
    var clientContext: ClientContext? 
    var fields:String? 

    init() {} 

    init?(map: Map) {} 

    mutating func mapping(map: Map) {   
     customer <- map["customer"] 
     clientContext <- map["clientContext"] 
     fields <- map["fields"] 
    } 

    func asURLRequest() throws -> URLRequest{ 
     if let url = URL(string:"your http://......"){ 
      return URLRequest(url: url) 
     }else{ 
      return URLRequest() 
     } 

    }  
} 

が、これは私がお答えしたいと思います

+0

はい、質問があります。空のURLリクエストを送信するにはどうすればよいですか?私は、もし "失敗すれば"という条件の場合には? –

+0

空のURLRequestを返すことはできますが、サーバーからの回答はありません。私の回答は編集されています –

関連する問題