我从Swift 3更新到4,我正在使用RxSwift,更新时遇到错误"呼叫中的额外参数"因为它现在需要类型元素。我尝试创建(响应,数据)元组,但仍然给出了一个错误,如图所示。
public static func deleteCrush(receiver: String, receiver_type: ProviderType) -> Observable<(HTTPURLResponse, NSArray)> {
/*
Delete crush identified by `id`
*/
let parameters: Parameters = [
"receiver": receiver,
"receiver_type": receiver_type.rawValue
]
print("deleteCrush paramreters: \(parameters)")
return Observable.create({ (observer) -> Disposable in
Alamofire.request(Router.deleteCrush(parameters: parameters))
.rx
.responseJSON()
.debug()
.subscribe(onNext: { (response, json) in
print("deleteCrush response code: ", response.statusCode)
if let data = json as? NSArray {
observer.on(.next(response, data))
observer.on(.completed)
}
}, onError: { (error) in
print("deleteCrush error: ", error)
observer.on(.error(error))
}, onCompleted: nil, onDisposed: nil)
})
}
错误:来电中的额外参数 尝试修复后:
var tuple = (response, json)
if let data = json as? NSArray {
observer.on(.next(tuple))
observer.on(.completed)
}
错误:
活动&lt;(HTTPURLResponse,NSDictionary)&gt;&#39;生成类型&#39;事件&#39;的结果,但上下文需要&#39;事件&lt;(HTTPURLResponse,NSDictionary)&gt;
答案 0 :(得分:1)
您似乎没有将正确的数据类型传递给您的活动。
要么只是简单地包裹你的元组,
\b # a word boundary
([A-Z]) # uppercase letters
(\w+) # [a-zA-Z0-9_]+
或者为元素类型使用正确的元组类型,
observer.on(.next((response, data)))
请注意,您根据方法返回类型将元组设置为if let data = json as? NSArray {
var tuple = (response, data)
observer.on(.next(tuple))
observer.on(.completed)
}
,这是不正确的。
答案 1 :(得分:0)
Swift可能很难确定您在.next
中发送的数据类型。有时会发生这种情况并且编译器提供了完全无用的错误消息
检查您的功能定义。具体是返回类型。您返回的观察者可能与您发送给观察员的类型不同。