最新バージョン(4.0.0)でAlamofireリクエストメソッドを呼び出すときにエラーが発生します。
構文は次のとおりです。
Alamofire.request(urlString,method: .post, parameters: requestParams, encoding: .JSON, headers: [:])
requestParamのタイプは[String:Any]です
問題が発生しました。JSONの代わりにJSONEncoding.defaultを使用する必要があるため、新しい構文は
Alamofire.request(urlString,method: .post, parameters: requestParams, encoding: JSONEncoding.default, headers: [:])
参照先は次のとおりです。 https://github.com/Alamofire/Alamofire/issues/1508#issuecomment-246207682
基本的に、パラメーターの1つが間違ったタイプの場合、Swiftコンパイラーはrequest(urlRequest:URLRequestConvertible)
を使用していると想定し、method
はextra argument
になります
そのパラメーターをもう一度調べて、すべてが正しいタイプであることを確認してください(Parameters?
、ParameterEncoding
、およびHTTPHeaders
)
私は同じ問題を抱えていました。問題はパラメータのタイプにあり、タイプは[String:Any]でなければなりません。この変更を行った後、それは私のために働いた。
Alamofire.request(youUrl, method: .post, parameters: param as? [String: Any], encoding: JSONEncoding.default, headers: [:])
.responseJSON { response in
Swift 3向けに更新:
let requestString = "https://thawing-inlet-46474.herokuapp.com/charge.php"
let params = ["stripeToken": token.tokenId, "amount": "200", "currency": "usd", "description": "testRun"]
Alamofire.request(requestString,method: .post, parameters: params, encoding: JSONEncoding.default, headers: [:]).responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
if response.result.value != nil{
print("response : \(response.result.value)")
}
break
case .failure(_):
print("Failure : \(response.result.error)")
break
}
}
パラメータのタイプの一部が間違っていることを意味します。これらの値を送信していることを確認してください。
url: String
method: HTTPMethod (E.g: .post)
parameters: [String:Any]
encoding: ParameterEncoding (E.g: JSONEncoding.default)
headers: [String: String]
parameters
が[String:Any]であることを確認してください
すなわち
let parameters = ["foo": "bar"]
ない:
let parameters : Parameter = ["foo": "bar"]
データ型が間違っているため、このエラーが発生しています。
パラメータタイプは[String:Any]であり、パラメータタイプはオプションではありません。
ヘッダータイプは[String:String]またはnilである必要があり、ヘッダータイプもオプションではありません。
それが役に立てば幸い。 :-)
RequestUrlsがURLタイプではなく文字列であることを確認することでこれを修正しました。また、パラメーターがnilの場合のパラメーター引数を削除しました。
例えば。
Alamofire.request(requestUrl, method: .get, encoding: URLEncoding.default)
AlmofireメソッドはSwift 3で次のように変更されました。
これは非常によく似た関数のファミリであり、異なる関数を使用しようとしているとコンパイラに思わせます。指定する引数がすべて、予期される正しいタイプであることを再確認してください。たとえば、ヘッダーを持つバリアントに[String:Any]を渡していましたが、[String:String]を予期しており、同じエラーが発生しました。
これは、imが任意のパラメーターでオプション変数を使用しているためです。
私は同じ問題に直面していましたそして、以前にここに投稿したようにすべての答えを試してみてください、そしてこの問題の解決策と理由を得ました。
これは、リクエストで解析された間違ったオブジェクトを渡すために発生し、最終的に解決策-
theJSONText
-JSON文字列
urlStr
-URL文字列
let urlEncoadedJson = theJSONText.addingPercentEncoding(withAllowedCharacters:.urlHostAllowed)
let urls = NSURL(string:"urlStr\(urlEncoadedJson ?? "")")
let method: HTTPMethod = .get
Alamofire.request(urls! as URL, method: method, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
if response.result.value != nil
{
// write your code here
}
break
case .failure(_):
if response.result.error != nil
{
print(response.result.error!)
}
break
}
}
注-URLにパラメータはありません。
私の問題は、アンラップされていないヘッダーのオプションのパラメーターにありました。
すべてのパラメーターが正しい形式になっていることを確認してください。最も重要なことは、パラメーターが[String:Any]タイプの配列でなければならないことです。
Alamofire.request(url, method: .post, parameters: parameters, encoding:
JSONEncoding.default, headers: [:]).responseJSON
{ response in
switch (response.result) {
case .success:
print(response)
break
case .failure:
print(Error.self)
}
}