【问题标题】:Swift 3.0, Alamofire 4.0 Extra argument 'method' in callSwift 3.0,Alamofire 4.0 调用中的额外参数“方法”
【发布时间】:2017-06-26 02:27:08
【问题描述】:

我已阅读有关此问题的所有问题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, 仍然没有变化。同样的问题。

【问题讨论】:

  • 您应该更新方法类型。它们应该是小写的,例如 .post 和 .get
  • 这是重复的,你的代码根本不相似,因为你有像“AnyObject”这样的参数
  • 尝试了您推荐的两个朋友。同样的问题..没有变化
  • 尝试在 EDIT 2 中删除 .JSONEncoding 中的前导 .
  • 还有? 中的getData?self.postData?,这也没有任何意义

标签: ios swift swift3 alamofire


【解决方案1】:

你需要使用另一个函数来上传数据:

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

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

【讨论】:

  • 试过Alamofire.upload(postData: Data, to: fullURL, method: HTTPMethod.post, headers: nil).responseJSON { response in self.responseData = response.result.value }我得到一个错误Ambigious reference to member upload(_:to:method:headers)
【解决方案2】:

答案在你的链接中,这里是方法请求的新定义:

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
            }
        }

【讨论】:

  • 我已经删除了标题.. 完全相同的问题。完全没有变化。
  • 再次。完全相同的问题。我做了改变。 Infact XCode 在自动完成中显示 Parameters
  • 奇怪,因为方法定义是这样的:Alamofire.request(, method: , parameters: ,编码:,标题:) 尝试清理你的构建文件夹
  • 是的,做了清理工作。同样的问题没有变化。
  • 还是该死的Extra argument method in call.
【解决方案3】:

我尝试的是

var postData    : Parameters?
var getData    : Parameters?

在初始化中,我像这样初始化了 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 推荐

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。

【讨论】:

  • Alamofire 不推荐upload。不幸的是,他们也没有提出解决方案。真的很烂..
【解决方案4】:

我在为parameters 传递NSDictionary 时收到此错误,更不用说错误消息具有误导性。

根据文档,请求的参数是 [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 是字符串,requestParameters() 返回类型为 [String: Any] 的 swift 字典。它是JSONEncoding.default,而不是.JSONEncoding.default

请参阅 GitHub 上的此线程以进行澄清:

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

【讨论】:

    【解决方案5】:

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

     let parameters : [String:any] = ["key":value]
    

    【讨论】:

      猜你喜欢
      • 2017-01-22
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多