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的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire Swift 3.0 调用中的额外参数

Swift 3.0 迁移后的 Alamofire 错误:“调用中的额外参数”(请求方法)

swift2:调用中的额外参数“错误”

Swift 2中的“调用中的额外参数'错误'”错误[重复]

Swift 调用中的额外参数“谓词”

如何在 swift 的操场上修复“调用中的额外参数 'at'”