ReactiveSwift SignalProducer:参数 'failed' 必须在参数 'value' 之前

ReactiveSwift SignalProducer : Argument 'failed' must precede argument 'value'

我正在尝试使用 ReactSwift 更新和升级一段旧代码,因为我想要 运行 它与 XCode 9。我已经定义了一个 class 网络

final class Network: NSObject {
    static func request(_ URLRequest: URLRequestConvertible) -> SignalProducer<Any, NetworkError> {
        return SignalProducer { sink, disposable in
            Alamofire.request(URLRequest)
                .validate()
                .responseJSON { response in
                    switch response.result {
                    case .success(let value):
                        sink.send(value: value)
                        sink.sendCompleted()
                    case .failure(let error):
                        // modification en as NSError
                        sink.send(error: NetworkError(error: error as NSError))
                    }
                }
        }
    }
}

在使用泛型类型的函数中调用:

private func fetch<T: Himotoki.Decodable>(URLRequest: URLRequestConvertible) -> SignalProducer<T, NetworkError> {
return Network.request(URLRequest)
    .attemptMap { JSON in
        do {
            return .success(try decodeValue(JSON) as T)
        } catch let error {
            return .failure(.incorrectDataReturned)
        }
}

}

通用函数用于使用Alamofire发出网络请求,如下所示。

// Get static UserData
static func fetchUserData() -> SignalProducer<UserData, NetworkError> {
    return fetch(URLRequest: MoneyCupUsersBackEndRouter.getUserData)
}

所以,我打电话给:

    API.fetchUserData()
        .on(started: {
            SVProgressHUD.show()
        },
            value: { cfg in
                globalConfig = cfg
            },
            failed: { [weak self] error in
                self?.view.window?.dodo.error("Impossible de récupérer la configuration globale")
            },
            terminated: {
                SVProgressHUD.dismiss()
        })
        .start()

}

这个方案以前运行良好,我的代码中有大量这样的方案。但是由于我已经升级到 ReactiveCocoa,我的代码不再编译。我有一条消息指出:

参数 'failed' 必须在参数 'value'

之前

过去,对于参数具有默认值的 Swift 函数,您可以在调用站点根据需要重新排序参数。 This feature was removed in Swift 3, which means you now must specify arguments in the same order as they are defined. So for the call to the on function,必须把value:参数移到最后。