Swift 3.0,Alamofire 4.0调用中的额外参数'方法'

问题描述 投票:3回答:5

我已经阅读了有关thisthis这个问题的所有问题。我有以下代码

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,仍然没有变化。同样的问题。

ios swift swift3 alamofire
5个回答
1
投票

您需要使用其他功能上传数据:

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

GET请求的参数必须是[String:Any]类型


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
投票

我试过的是

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。


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:Any]的swift字典。它是JSONEncoding.default,而不是.JSONEncoding.default

请参阅GitHub上的此主题以获得澄清:

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


-1
投票

我面临同样的问题,但通过更改参数类型为[String:any]解决我的问题

 let parameters : [String:any] = ["key":value]
© www.soinside.com 2019 - 2024. All rights reserved.