2017-02-08 5 views
3

Я прочитал все вопросы по этому вопросу this и this. У меня есть следующий кодSwift 3.0, Alamofire 4.0 Дополнительный аргумент 'метод' в вызове

let fullURL = God.getFullURL(apiURL: self.apiUrl) 
     if (getOrPost == God.POST) { 
      Alamofire.request(fullURL, method: .POST, AnyObject: self.postData?, encoding:.JSONEncoding.default, headers: nil).responseJSON{ response in 
       self.responseData = response.result.value 
      } 
     } else if (getOrPost == God.GET) { 
      Alamofire.request(fullURL, method : .GET, Parameters: getData, encoding:.JSONEncoding.default, headers: nil).responseJSON{ response in 
       self.responseData = response.result.value 
      } 
     } 

Мои Swift и Xcode версии

Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1) 
Target: x86_64-apple-macosx10.9 
Version 8.2.1 (8C1002) 

Мой файл стручок

source 'https://github.com/CocoaPods/Specs.git' 
platform :ios, '10.0' 
use_frameworks! 

target 'Buseeta' do 
     pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :branch => 'master' 
end 

pod 'AlamofireObjectMapper', '~> 4.0' 

pod 'SwiftyJSON' 

Я получаю ошибку Extra argument 'method' in call на обеих линиях запроса Alamofire.

Не помещайте этот вопрос как дубликат без тщательной проверки. Я исправил код точно в соответствии с повторяющимися вопросами.

EDIT 1

Я попытался после удаления заголовков, тот же вопрос о .POST и .GET

let fullURL = God.getFullURL(apiURL: self.apiUrl) 
     if (getOrPost == God.POST) { 
      Alamofire.request(fullURL, method: .POST, AnyObject: self.postData?, encoding:.JSONEncoding.default).responseJSON{ response in 
       self.responseData = response.result.value 
      } 
     } else if (getOrPost == God.GET) { 
      Alamofire.request(fullURL, method : .GET, Parameters: getData?, encoding:.JSONEncoding.default).responseJSON{ response in 
       self.responseData = response.result.value 
      } 
     } 

EDIT 2

if (getOrPost == God.POST) { 
      Alamofire.request(fullURL, method: .post, parameters: self.postData?, encoding:.JSONEncoding.default).responseJSON{ response in 
       self.responseData = response.result.value 
      } 
     } else if (getOrPost == God.GET) { 
      Alamofire.request(fullURL, method : .get, parameters: getData?, encoding:.JSONEncoding.default).responseJSON{ response in 
       self.responseData = response.result.value 
      } 
     } 

РЕДАКТИРОВАНИЕ 3

Я заменил method : HTTPMethod.get, до сих пор без изменений. Тот же вопрос.

+0

Вы должны обновить тип метода. Они должны быть строчными, например .post и .get – ridvankucuk

+0

Это дубликат, ваш код совсем не похож, так как у вас есть аргумент вроде «AnyObject» –

+0

попробовал обоих ваших друзей рекомендаций. такой же вопрос .. без изменений – Siddharth

ответ

0

Ответ в вашей ссылке, здесь новое определение запроса метода:

let fullURL = God.getFullURL(apiURL: self.apiUrl) 
     if (getOrPost == God.POST) { 
      Alamofire.request(fullURL, method: .post, parameters: self.postData?, encoding:.JSONEncoding.default).responseJSON{ response in 
       self.responseData = response.result.value 
      } 
     } else if (getOrPost == God.GET) { 
      Alamofire.request(fullURL, method : .get, parameters: getData, encoding:.JSONEncoding.default).responseJSON{ response in 
       self.responseData = response.result.value 
      } 
     } 
+0

Я удалил заголовки .. точно такая же проблема. Никаких изменений вообще. – Siddharth

+0

проверить обновленный ответ –

+0

еще раз. точно такой же вопрос. я сделал изменения. Infact XCode показывает 'Параметры' в автозаполнении – Siddharth

0

То, что я попытался было

var postData : Parameters? 
var getData : Parameters? 

в INIT, я initalized в PostData как этот

self.postData  = try! JSONSerialization.data(withJSONObject: postData, options: JSONSerialization.WritingOptions.prettyPrinted) 

и

if (getOrPost == God.POST) { 
      Alamofire.request(fullURL, method: HTTPMethod.post, parameters: postData as Parameters?, encoding: JSONEncoding.default, headers: nil).responseJSON{ response in 
       self.responseData = response.result.value 
      } 
     } else if (getOrPost == God.GET) { 
      Alamofire.request(fullURL, method: HTTPMethod.get, parameters: getData, encoding: JSONEncoding.default, headers: nil).responseJSON{ response in 
       self.responseData = response.result.value 
      } 
     } 

EDIT

компилируется без ошибок :). Я попробовал upload рекомендацию @ cosmicman66

if (getOrPost == God.POST) { 
      Alamofire.upload(postData!, to: fullURL, headers:nil).responseJSON { response in 
       self.responseData = response.result.value 
      } 
     } else if (getOrPost == God.GET) { 
      Alamofire.request(fullURL, method: HTTPMethod.get, parameters: getData, encoding: JSONEncoding.default, headers: nil).responseJSON{ response in 
       self.responseData = response.result.value 
      } 
     } 

EDIT

Это не сработало. Запрос не дошел. Я где-то читал, что загрузка не должна использоваться для POST.

+0

Ребята из Alamofire не рекомендуют «выгружать». К сожалению, они также не предлагают решения. Серьезно SUCKS .. – Siddharth

1

Вы должны использовать другую функцию для загрузки данных:

func upload(
    _ data: Data, 
    to url: URLConvertible, 
    method: HTTPMethod = .post, 
    headers: HTTPHeaders? = nil) 
    -> UploadRequest 

и параметры для запроса GET должен быть типа [String: Любой]

+0

Tried 'Alamofire.upload (postData: Data, to: fullURL, method: HTTPMethod.post, headers: nil) .responseJSON {ответ в self.responseData = response.result.value }' Я получаю error 'Неправильная ссылка на загрузку элемента (_: to: method: headers)' – Siddharth

0

Я получил эту ошибку, когда я проходил мимо NSDictionary для parameters и не говоря уже о сообщении об ошибке вводит в заблуждение.

В соответствии с документацией параметры запроса имеют тип [String: Any]. При этом я исправил свою проблему.

Я на Xcode 8.3.1, Alamofire 4.4.0

Это код, который работал для меня:

Alamofire.request(requestUrl, method: .post, parameters: requestParameters(), encoding: JSONEncoding.default, headers: nil) 
      .responseJSON { response in 

     print(response) 
} 

requestUrl является String, requestParameters() возвращает быстры словарь типа [String : Любые]. И это JSONEncoding.default, не .JSONEncoding.default

См эту тему на GitHub для уточнения:

https://github.com/Alamofire/Alamofire/issues/1508

+0

Попробуйте написать явный ответ, а затем привести источники! См. Здесь (https://stackoverflow.com/help/how-to-answer). –

+0

Пожалуйста, сообщите свой ответ. Благодарю. – Siddharth

+0

@ Сиддхарт, обновил ли ответ ответ? – Jithin