Alamofire 4错误请求'呼叫中的额外参数'

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

我已经更新到Xcode8,swift3和Alamofire 4,我现在在'alamofire.request'开头的下面一行中收到错误'额外参数'方法'

var pulseVoteEndpoint: String = "https://example.com/app1/votingapi/set_votes.json"

var pulseNewVote = ["votes":[["value":valueString,"uid":uidString,"entity_id":nidInt,"entity_type":"node","tag":"points","value_type":"points"]]]

Alamofire.request(pulseVoteEndpoint, method: .post, parameters: pulseNewVote, encoding: .json)
         .response { request, response, data, error in
             debugPrint(response)
             print(request)
             print (response)
             print (error)
         }

有任何想法吗?

谢谢

swift alamofire
3个回答
2
投票

The encoding argument of request(...) expects static properties, not enum cases.

我们可以看看request(...)Alamofire)的静态Alamofire/Source/Alamofire.swift方法的签名

public func request(
    _ url: URLConvertible,
    method: HTTPMethod = .get,
    parameters: Parameters? = nil,
    encoding: ParameterEncoding = URLEncoding.default,
    headers: HTTPHeaders? = nil)
    -> DataRequest
{ /* ... */ }

第一个参数是一个符合URLConvertible协议的协议; String is valid;到目前为止都很好。

第二个参数的类型是simply an enum.post是有效的情况,好的。

第三个参数应该是Parameters类型,即a typealias for [String: Any]

/// A dictionary of parameters to apply to a `URLRequest`.
public typealias Parameters = [String: Any]

您提供的参数pulseNewVote的类型为Dictionary<String, Array<Dictionary<String, Any>>>,但仍应能够被预期的参数类型(Dictionary<String, Any>)使用。所以这应该还可以,即使你可能想要通过明确地将pulseNewVote的类型注释到[String: Any]来考虑帮助Swift:

var pulseNewVote: [String: Any] = ...

然而,第四个参数,编码不是enum,而是一些protocol ParameterEncoding类型符合的struct。这些类型具有静态成员(返回self的实例),当显式类型时,它可能看起来像enum,但必须包含显式类型

public struct JSONEncoding: ParameterEncoding {

    // MARK: Properties
    /// Returns a `JSONEncoding` instance with default writing options.
    public static var `default`: JSONEncoding { return JSONEncoding() }
    // ...
}

因此,您需要将第四个参数.json提供的值替换为例如JSONEncoding.defaultrequest。通过此修复,您对Alamofire.request(pulseVoteEndpoint, method: .post, parameters: pulseNewVote, encoding: JSONEncoding.default) 的调用应如下所示:

reponse

但是,您给出的错误(附加参数)来自response调用的完成处理程序。提供给DefaultDataResponse的调用的完成处理程序是一个以单个DefaultDataResponse作为参数的处理程序(不是你尝试的4个不同的参数)。 request类型的一个实例有公共成员responsedataerrorresponse,您可以通过完成处理程序中的单个DefaultDataResponse参数(类型为response)访问它。调整example from the Alamofire documentation中的完成处理程序调用此事实(使用request,我们可以构造最终的responseAlamofire.request(pulseVoteEndpoint, method: .post, parameters: pulseNewVote, encoding: JSONEncoding.default) .response { response in // note that these are all optionals, so // you might want to unwrap them first print(response.request) print(response.response) print(response.error) } 链接调用:

.json

1
投票

而不是JSONEncoding.default编码,尝试[String : Any]?

您的参数应该投放到:qazxsw poi

这是编译器的一个问题,错误地报告额外参数的错误。

最后,您的行应如下所示:

Alamofire.request(pulseVoteEndpoint, method: .post, parameters: pulseNewVote as [String : Any]?, encoding: JSONEncoding.default)
         .response { request, response, data, error in
// rest of the code

0
投票

我有一个Xcode错误导致发生此错误,因为部分url字符串在不需要时被强制解包。

以下是错误解包属性的调用:

Alamofire.request(baseUrl + "notes/\(note.id!)", method: .get, parameters: nil, encoding: JSONEncoding.default, headers: headers).responseJSON { [weak self] response in

以下是将消除错误的固定调用:

Alamofire.request(baseUrl + "notes/\(note.id)", method: .get, parameters: nil, encoding: JSONEncoding.default, headers: headers).responseJSON { [weak self] response in
© www.soinside.com 2019 - 2024. All rights reserved.