我已经更新到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)
}
有任何想法吗?
谢谢
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.default
。 request
。通过此修复,您对Alamofire.request(pulseVoteEndpoint, method: .post, parameters: pulseNewVote, encoding: JSONEncoding.default)
的调用应如下所示:
reponse
但是,您给出的错误(附加参数)来自response
调用的完成处理程序。提供给DefaultDataResponse
的调用的完成处理程序是一个以单个DefaultDataResponse
作为参数的处理程序(不是你尝试的4个不同的参数)。 request
类型的一个实例有公共成员response
,data
,error
和response
,您可以通过完成处理程序中的单个DefaultDataResponse
参数(类型为response
)访问它。调整example from the Alamofire documentation中的完成处理程序调用此事实(使用request
,我们可以构造最终的response
和Alamofire.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
而不是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
我有一个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