Swift 4“调用中的额外参数”Rxswift
Posted
技术标签:
【中文标题】Swift 4“调用中的额外参数”Rxswift【英文标题】:Swift 4 "Extra argument in call" Rxswift 【发布时间】:2018-04-19 14:28:31 【问题描述】:我从 Swift 3 更新到 4,并且我正在使用 RxSwift,更新时我遇到了一个错误“调用中的额外参数”,因为它现在期望类型元素。我尝试创建 (response, data) 的元组,但仍然给我一个错误,如图所示。
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)
错误:
Event' 产生'Event'类型的结果,但上下文需要'Event
【问题讨论】:
请将代码和错误发布为文本,而不是图像。 好的,马上! 包装了这个 Observable 的函数定义看起来如何 @Sandeep 我更新了代码 你的返回类型是一个用元组指定的观察者。将传递给.next
的参数用括号括起来,例如.next((response, data))
【参考方案1】:
您似乎没有将正确的数据类型传递给您的事件。
要么简单地正确包装你的元组,
observer.on(.next((response, data)))
或者然后为您的元素类型使用适当的元组类型,
if let data = json as? NSArray
var tuple = (response, data)
observer.on(.next(tuple))
observer.on(.completed)
请注意,您将元组设置为 tuple = (response, json)
,根据您的方法返回类型,这不正确。
【讨论】:
【参考方案2】:Swift 可能很难确定您在.next
中发送的数据的类型。有时会发生这种情况,编译器会提供完全无用的错误消息
检查您的函数定义。特别是返回类型。您返回的观察者可能与您发送给观察者的类型不同。
【讨论】:
这很好,直到我转换为 Swift 4,现在调用需要 1 个元素类型的对象,并且不再接受元组。以上是关于Swift 4“调用中的额外参数”Rxswift的主要内容,如果未能解决你的问题,请参考以下文章