Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 闭包元组参数中存在错误_Ios_Swift_Alamofire_Rx Swift_Rxalamofire - Fatal编程技术网

Ios 闭包元组参数中存在错误

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) ->

我正在尝试使用RxSwift和RxAlamofire编写一个API层。 下面是API请求的代码

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的信息。