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:
参数移到最后。
我正在尝试使用 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:
参数移到最后。