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)
我的pod文件是
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'
在两个Alamofire请求行中,我都会Extra argument 'method' in call
错误中获得Extra argument 'method' in call
。
不要仔细检查,不要把这个问题标为重复。 我完全按照重复的问题修正了代码。
编辑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 } }
编辑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,
replacemethod : HTTPMethod.get,
仍然没有改变。 同样的问题。
您需要使用其他function上传数据:
func upload( _ data: Data, to url: URLConvertible, method: HTTPMethod = .post, headers: HTTPHeaders? = nil) -> UploadRequest
并且GET请求的参数必须是[String:Any]
答案在你的链接,这里是方法请求的新定义:
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 } }
我试过的是
var postData : Parameters? var getData : Parameters?
在init中,我像这样初始化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 } }
编辑
这编译没有错误:)。 我尝试了@ cosmicman66的upload
build议
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 } }
编辑
这没有奏效。 请求没有达到。 我读了上传不应该用于POST的地方。
我得到这个错误,当我传递一个NSDictionary
的parameters
而不是说错误消息是误导。
根据文档,请求的参数是[String:Any]types。 我这样做了我的问题。
我在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()
返回types为[String:Any]的swift字典。 它是JSONEncoding.default
,而不是.JSONEncoding.default
请参考GitHub上的这个主题进行说明: