プロジェクトをSwift 3に移行しました(Podfileでpod 'Alamofire', '~> 4.0'
を使用してAlamofireを最新のSwift 3バージョンに更新しました)。
すべてのAlamofire.requestで「余分な引数の呼び出し」エラーが表示されるようになりました。例えば:
let patientIdUrl = baseUrl + nextPatientIdUrl
Alamofire.request(.POST, patientIdUrl, parameters: nil, headers: nil, encoding: .JSON)
誰に理由を教えてもらえますか?
Alamofire によると、バージョン4.0.0のURL要求のドキュメントHTTPメソッドは次のようになります。
Alamofire.request("https://httpbin.org/get") // method defaults to `.get`
Alamofire.request("https://httpbin.org/post", method: .post)
Alamofire.request("https://httpbin.org/put", method: .put)
Alamofire.request("https://httpbin.org/delete", method: .delete)
したがって、URLリクエストは次のようになります。
Alamofire.request(patientIdUrl, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: nil)
サンプルリクエストは次のようになります。
Alamofire.request(url, method: .post, parameters: param, encoding: JSONEncoding.default, headers: [AUTH_TOKEN_KEY : AUTH_TOKEN])
.responseJSON { response in
print(response.request as Any) // original URL request
print(response.response as Any) // URL response
print(response.result.value as Any) // result of response serialization
}
お役に立てれば!
これは私のために働いた。
encodingパラメーターを削除する必要はありません
Swift 5.xの更新
Alamofireは、Swift 5で導入されたResult
タイプを使用します。
また、Alamofire.request
がAF.request
に変更され、スイッチのresponse.result
値が.success
および.failure
になります。
AF.request("https://yourServiceURL.com", method: .get, parameters: [:], encoding: URLEncoding.default, headers: ["":""]).responseJSON { (response:DataResponse<Any>) in
switch response.result {
case let .success(value):
print(value)
case let .failure(error):
print(error)
}
}
Swift 3.x/4.x
Alamofire.request("https://yourServiceURL.com", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
if let data = response.result.value{
print(response.result.value)
}
break
case .failure(_):
print(response.result.error)
break
}
}
parametersがタイプであることを確認してください
[String:Any]?
Getの場合
Alamofire.request("https://yourGetURL.com", method: .get, parameters: ["":""], encoding: URLEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
if let data = response.result.value{
print(response.result.value)
}
break
case .failure(_):
print(response.result.error)
break
}
}
でも動作します
JSONEncoding.default
ヘッダーの場合
ヘッダーを渡す場合は、タイプが[String:String]
であることを確認してください
Parameter Encoding Link
を確認します https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0%20Migration%20Guide.md#parameter-encoding-protocol
Swift 3.0およびxCode 8.0を使用したメソッドAlamofire 4.0のポスト
Alamofire.request(URL, method: .post, parameters: PARAMS)
.responseJSON { closureResponse in
if String(describing: closureResponse.result) == "SUCCESS"
{
// Sucess code
}
else
{
// Failure Code
}
}
私の解決策は、ヘッダーを使用している場合、そのタイプは[String:String]でなければなりません。
このエラーは、パラメーター値までです。 [String:String]でなければなりません
let url = URL(string: "http://yourURLhere")!
let params: [String: String] = ["name": "oskarko", "email": "[email protected]", "sex": "male"]
Alamofire.request(url, method: .post, parameters: params, encoding: URLEncoding.default, headers: nil).validate(statusCode: 200..<600).responseJSON() { response in
switch response.result {
case .success:
var result = [String:String]()
if let value = response.result.value {
let json = JSON(value)
}
case .failure(let error):
print("RESPONSE ERROR: \(error)")
}
}
あなたと同じ問題を解決しました。問題は、ヘッダーにAlamofireをインポートしたため、コールリクエストがあったときにAlamofireを削除するだけです。そのように:
request(.POST、patientIdUrl、パラメーター:nil、ヘッダー:nil、エンコード:.JSON)
それがあなたのお役に立てば幸いです。
私はこれと同じに遭遇しました呼び出し中の余分な引数 'method'私のRL変数が範囲外でしたのエラー。
あなたの場合は、baseUrl
とnextPatientIdUrl
の両方がAlamofire.request(patientIdUrl,..)
メソッドを使用しているときにスコープ内にあることを確認してください。
これで問題が解決することを願っています。ありがとうございます!
Alamofireからこのコードをコピーし、URLRequestを作成し、Alamofire.request(URLRequest)メソッドを使用して、このエラーを回避します
originalRequest = try URLRequest(url: url, method: method, headers: headers)
let encodedURLRequest = try encoding.encode(originalRequest!, with: parameters)
この問題を修正しました:
注意:Swift 3のAlamofireメソッドのシグネチャの変更
注目に値する2つのこと。
Alamofire.request("https://yourServiceURL.com", method: .post,
の代わりにAlamofire.request(url: "https://yourServiceURL.com", method: .post,
を使用します。[String: String]
であることを確認してください。明示的に宣言します。func API()
{
if Reachability.isConnectedToNetwork()
{
let headers = ["Vauthtoken":"Bearer \(apiToken)"]
print(headers)
// let parameter = ["iLimit":"10","iOffset":"0","iThreadId":"1"]
ApiUtillity.sharedInstance.showSVProgressHUD(text: "Loding...")
Alamofire.request(ApiUtillity.sharedInstance.API(Join: "vehicle/CurrentVehicleLists"), method:.get, parameters:nil, headers: headers).responseJSON { response in
switch response.result {
case .success:
print(response)
ApiUtillity.sharedInstance.dismissSVProgressHUD()
let dictVal = response.result.value
let dictMain:NSDictionary = dictVal as! NSDictionary
let statusCode = dictMain.value(forKey: "status") as! Int
if(statusCode == 200)
{
}
else if statusCode == 401
{
}
else
{
}
case .failure(let error):
print(error)
ApiUtillity.sharedInstance.dismissSVProgressHUD()
}
}
} else
{
ApiUtillity.sharedInstance.dismissSVProgressHUD()
ApiUtillity.sharedInstance.showErrorMessage(Title: "Internet Connection", SubTitle: "Internet connection Faild", ForNavigation: self.navigationController!)
}
}
この方法でこの問題を修正しました。
parameters
、encoding
、およびheaders
だけの余分なパラメーターを削除します。これらのパラメーターがnilの場合、削除してこの方法で終了できます。
Alamofire.request(yourURLString, method: .post)
私にとってこれは機能しています。
GETリクエストの場合
Alamofire.request("http://jsonplaceholder.typicode.com/todos/1/get").responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
if response.result.value != nil{
print(response.result.value!)
}
break
case .failure(_):
print(response.result.error)
break
}
}
POST用
let parameters = NSDictionary(object: "nara", forKey: "simha" as NSCopying)
Alamofire.request("http://jsonplaceholder.typicode.com/posts", method: HTTPMethod.post, parameters: parameters as? Parameters, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
if response.result.value != nil{
print(response.result.value!)
}
break
case .failure(_):
print(response.result.error)
break
}
}
ありがとう@ Rajan Maheswari。
Alamofireファイルをローカルに追加した場合は、リクエストの前に「Alamofire」を使用しないでください
let apipath = “your api URL”
request(apipath, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: nil).responseJSON { response in switch(response.result) {
case .success(_):
do {
let JSON = try JSONSerialization.jsonObject(with: response.data! as Data, options:JSONSerialization.ReadingOptions(rawValue: 0))
guard let JSONDictionary: NSDictionary = JSON as? NSDictionary else {
print("Not a Dictionary")
return
}
print("Post Response : \(JSONDictionary)")
}
catch let JSONError as NSError {
print("\(JSONError)")
}
break
case .failure(_):
print("failure Http: \(String(describing: response.result.error?.localizedDescription))")
break
}
}