Alamofireでのエラー
こんにちは。iOSアプリでAlamofireを使ってPOST通信しようとした際にタイトルのエラーが発生しました。解決するのに少し迷ったので記事にします。試した際の環境は以下の通りです。
Mac HighSierra 10.13.6
XCode 10.1
Swift 4.2
Xcodeでの開発はほとんどした事が無いのですが、検索すれば色々な記事が出てくるので途中までは詰まる事なく処理が書けました。
以下のように書いたところ...
ApiClient.swift
let parameter = try JSONEncoder().encode(user)
Alamofire.request(apiUrl + "register", method: .post, parameters: parameter, encoding: JSONEncoding.default, headers: headers).response { response in
guard let data = response.data else {
return
}
result = try? JSONDecoder().decode(Result.self, from: data)
}
このようにエラーが発生します。
error
Extra argument 'method' in call
原因・解決
Alamofire.requestのparametersで指定する型は[String: Any]にしないといけないのに、JSONEncoder().encodeで返ってくる型がData型であったためエラーが発生していたようです。何故かエラー内容が「Extra argument 'method' in call」となっていたので中々気づけませんでした...。
解決策としてEncodableを拡張し、エンコードして[String: Any]で返すメソッドを追加しました。
ApiClient.swift
extension Encodable {
func asDictionary() throws -> [String: Any] {
let data = try JSONEncoder().encode(self)
guard let dictionary = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any] else {
throw NSError()
}
return dictionary
}
}
ApiClient.swift
let parameter = try user.asDictionary()
Alamofire.request(apiUrl + "register", method: .post, parameters: parameter, encoding: JSONEncoding.default, headers: headers).response { response in
guard let data = response.data else {
return
}
result = try? JSONDecoder().decode(Result.self, from: data)
}
参考