Ios 闭包元组参数中存在错误
我正在尝试使用RxSwift和RxAlamofire编写一个API层。 下面是API请求的代码Ios 闭包元组参数中存在错误,ios,swift,alamofire,rx-swift,rxalamofire,Ios,Swift,Alamofire,Rx Swift,Rxalamofire,我正在尝试使用RxSwift和RxAlamofire编写一个API层。 下面是API请求的代码 public func _request(_ method: Alamofire.HTTPMethod, url: URLConvertible, parameters: [String : Any]? , encoding: ParameterEncoding, headers: [String : String]?, isSecondTryAfterAuth: Bool = false) ->
public func _request(_ method: Alamofire.HTTPMethod, url: URLConvertible, parameters: [String : Any]? , encoding: ParameterEncoding, headers: [String : String]?, isSecondTryAfterAuth: Bool = false) -> RxSwift.Observable<(HTTPURLResponse, Any)>
{
return RxAlamofire
.requestJSON(method, url, parameters: parameters, encoding: JSONEncoding.default, headers: self.appDelegateInstance.refreshToken)
.map({ (response, json) -> Observable<(HTTPURLResponse, Any)> in
return Observable.just(response, json)
})
}
public func\u请求(u方法:Alamofire.HTTPMethod,url:urlconverable,参数:[String:Any]?,编码:ParameterEncoding,头:[String:String]?,isSecondTryAfterAuth:Bool=false)->RxSwift.Observable
{
返回RxAlamofire
.requestJSON(方法、url、参数:参数、编码:JSONEncoding.default、标题:self.appDelegateInstance.refreshToken)
.map({(响应,json)->在
返回Observable.just(响应,json)
})
}
我在.map函数“Closure tuple parameter”(HTTPURLResponse,Any)“不支持解构”中遇到错误。你知道如何解决这个问题吗?闭包显然只有一个参数是两个值的元组(
httpurresponse
和Any
),但是你写(response,json)
的方式告诉swift,你正在尝试将单个元组参数解构为两个参数,这是不允许的
必须将其作为一个参数写入:
.map({ tuple -> Observable<(HTTPURLResponse, Any)> in
return Observable.just(tuple)
})
闭包显然只有一个参数是两个值的元组(
httpurresponse
和Any
),但是您编写(response,json)
的方式告诉swift,您正试图将单个元组参数解构为两个参数,这是不允许的
必须将其作为一个参数写入:
.map({ tuple -> Observable<(HTTPURLResponse, Any)> in
return Observable.just(tuple)
})
您正在使用map方法,该方法具有以下方法签名
/**
Projects each element of an observable sequence into a new form.
- seealso: [map operator on reactivex.io](http://reactivex.io/documentation/operators/map.html)
- parameter transform: A transform function to apply to each source element.
- returns: An observable sequence whose elements are the result of invoking the transform function on each element of source.
*/
public func map<R>(_ transform: @escaping (Self.E) throws -> R) -> RxSwift.Observable<R>
该示例转换元素并向每个元素添加1,并将其作为字符串返回。。在这里,您正在转换每个元素
此时b
的类型是可观察的
在上面的例子中,您更改它的方式是再次从map返回observable
您的代码可以这样可视化
let b = Observable.of(1, 2, 3, 4, 5).map { Observable.just("\($0 + 1)) }
现在,b
不是可观察的
,而是可观察的
这正是代码的问题所在
这是您的\u请求
方法
public func _request(_ method: Alamofire.HTTPMethod, url: URLConvertible, parameters: [String : Any]? , encoding: ParameterEncoding, headers: [String : String]?, isSecondTryAfterAuth: Bool = false) -> RxSwift.Observable<(HTTPURLResponse, Any)>
顺便说一下,末尾的映射看起来是多余的,因为它只是返回输入,除非您计划将输入类型
(response,json)
转换为其他类型。您使用的是具有以下方法签名的映射方法
/**
Projects each element of an observable sequence into a new form.
- seealso: [map operator on reactivex.io](http://reactivex.io/documentation/operators/map.html)
- parameter transform: A transform function to apply to each source element.
- returns: An observable sequence whose elements are the result of invoking the transform function on each element of source.
*/
public func map<R>(_ transform: @escaping (Self.E) throws -> R) -> RxSwift.Observable<R>
该示例转换元素并向每个元素添加1,并将其作为字符串返回。。在这里,您正在转换每个元素
此时b
的类型是可观察的
在上面的例子中,您更改它的方式是再次从map返回observable
您的代码可以这样可视化
let b = Observable.of(1, 2, 3, 4, 5).map { Observable.just("\($0 + 1)) }
现在,b
不是可观察的
,而是可观察的
这正是代码的问题所在
这是您的\u请求
方法
public func _request(_ method: Alamofire.HTTPMethod, url: URLConvertible, parameters: [String : Any]? , encoding: ParameterEncoding, headers: [String : String]?, isSecondTryAfterAuth: Bool = false) -> RxSwift.Observable<(HTTPURLResponse, Any)>
顺便说一句,末尾的映射看起来是多余的,因为它只是返回输入,除非您计划将输入类型
(response,json)
转换为其他类型。我在return Observable中遇到了一个错误。just(tuple.0,tuple.1)“缺少参数标签”scheduler:“在调用中”@VinodRadhakrishnan,您想用可观察的做什么?您是否只想创建一个只有一个值的可观察的
?将两个任意参数传递到可观察对象中是没有意义的。只需
。请参见编辑后的答案。也许这就是你的意思?我的要求是返回httpResponse和json数据。我是RxSwift的初学者,所以我不知道我做得对。@VinodRadhakrishnan从周围函数的返回类型判断,我的答案似乎可行。我建议您先了解更多关于RxSwift的信息。我在返回Observable中发现一个错误。just(tuple.0,tuple.1)“缺少参数标签”scheduler:“在调用中”@VinodRadhakrishnan实际上,您想用Observable
做什么?您是否只想创建一个只有一个值的可观察的
?将两个任意参数传递到可观察对象中是没有意义的。只需
。请参见编辑后的答案。也许这就是你的意思?我的要求是返回httpResponse和json数据。我是RxSwift的初学者,所以我不知道我做得对。@VinodRadhakrishnan从周围函数的返回类型判断,我的答案似乎可行。我建议您先了解更多关于RxSwift的信息。