Swift 4"呼叫中的额外参数" Rxswift

时间:2018-04-19 14:28:31

标签: swift rx-swift

我从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;

2 个答案:

答案 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中发送的数据类型。有时会发生这种情况并且编译器提供了完全无用的错误消息

检查您的功能定义。具体是返回类型。您返回的观察者可能与您发送给观察员的类型不同。