包装在静态函数中时,Alamofire 4.0“调用中的额外参数'方法'”

Posted

技术标签:

【中文标题】包装在静态函数中时,Alamofire 4.0“调用中的额外参数\'方法\'”【英文标题】:Alamofire 4.0 "extra argument 'method' in call" when wrapped in static function包装在静态函数中时,Alamofire 4.0“调用中的额外参数'方法'” 【发布时间】:2017-03-20 18:51:57 【问题描述】:

我正在编写一个在 Swift 3/Xcode 8 中包含 Alamofire 网络请求的方法。当包装在标准函数中时,以下代码块编译时不会出错:

func registerUser(firstName: String, lastName: String, email: String, username: String, password: String, profilePicture: String, completion: @escaping(JSON?) -> ()) 
    let params: [String:Any]? = [
        "first_name" : firstName,
        "last_name" : lastName,
        "email" : email,
        "username" : username,
        "password" : password,
        "profile_pic" : profilePicture
    ]

    Alamofire.request("\(baseURL)/users/create", method: .post, parameters: params, encoding: JSONEncoding.default, headers: nil).responseJSON  response in
        switch response .result 
        case .success(let value) :
            completion(JSON(value))
        case .failure(let error) :
            let error = error as Error
            print(error.localizedDescription)
            completion(nil)
        
    

但是,当我将此函数设为静态时,我收到错误“调用中的额外参数'方法'”。我尝试了帖子中列出的具有类似问题的解决方案,但没有积极的结果。知道可能导致此问题的原因吗?

【问题讨论】:

尝试删除标头,如果它是 nil 或者如果不是 nil 那么它应该是 [String: String] 这可能意味着在同一范围内有一个类似的静态函数。你能在包含类/结构的同一范围内发布其他代码吗? 删除标题会导致相同的结果。在同一范围内没有类似的静态方法。这是该类中当前包含的唯一方法。 baseURL 定义在哪里? 问题已解决。看起来这是一个涉及 baseURL 在方法之外的范围问题。 【参考方案1】:

问题暂时解决。 baseURL 变量不在方法内,这是一个范围界定问题。以下将为我构建。

func registerUser(firstName: String, lastName: String, email: String, username: String, password: String, profilePicture: String, completion: @escaping(JSON?) -> ()) 
    let baseURL = "url"
    let params: [String:Any]? = [
        "first_name" : firstName,
        "last_name" : lastName,
        "email" : email,
        "username" : username,
        "password" : password,
        "profile_pic" : profilePicture
    ]

    Alamofire.request("\(baseURL)/users/create", method: .post, parameters: params, encoding: JSONEncoding.default, headers: nil).responseJSON  response in
        switch response .result 
        case .success(let value) :
            completion(JSON(value))
        case .failure(let error) :
            let error = error as Error
            print(error.localizedDescription)
            completion(nil)
        
    

【讨论】:

以上是关于包装在静态函数中时,Alamofire 4.0“调用中的额外参数'方法'”的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 函数本身可以正常工作,但在包装在 UDF 中时不执行任务

无法调用非函数类型“HTTPURLResponse?”的值- 阿拉莫菲尔 4.0

Alamofire 4.0:timeoutIntervalForRequest

在 Alamofire 4.0 中初始化 SessionManager

如何使用参数 swift 3.0 Alamofire 4.0 调用邮政服务?

如何在 Xcode 8.0 中安装 Alamofire 4.0