我已经阅读了有关this和this这个问题的所有问题。我有以下代码
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
错误。
不要仔细检查,不要将此问题标记为重复。我已根据重复的问题完全修复了代码。
编辑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,
仍然没有变化。同样的问题。
您需要使用其他功能上传数据:
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中,我像这样初始化了帖子数据
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
推荐
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]类型。这样做我解决了我的问题。
我在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:Any]的swift字典。它是JSONEncoding.default
,而不是.JSONEncoding.default
请参阅GitHub上的此主题以获得澄清:
我面临同样的问题,但通过更改参数类型为[String:any]解决我的问题
let parameters : [String:any] = ["key":value]