3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Alamofireを使用してPOST通信しようとすると「Extra argument 'method' in call」とエラーが発生する

Posted at

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)
}

参考

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?