Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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
Swift 围绕网络创建反应式包装器_Swift_Alamofire_Reactive Programming_Rx Swift_Reactivex - Fatal编程技术网

Swift 围绕网络创建反应式包装器

Swift 围绕网络创建反应式包装器,swift,alamofire,reactive-programming,rx-swift,reactivex,Swift,Alamofire,Reactive Programming,Rx Swift,Reactivex,在为我的网络层创建反应式扩展时,我注意到一些模式,我想提取这些模式,以便简化我的逻辑,以便将来实现。。。因此,我现在有两种方法与此类似: static func create(params: [ String: AnyObject ]) -> Observable<Type> { return Observable<Type>.create { observer -> Disposable in let request = Alamof

在为我的网络层创建反应式扩展时,我注意到一些模式,我想提取这些模式,以便简化我的逻辑,以便将来实现。。。因此,我现在有两种方法与此类似:

static func create(params: [ String: AnyObject ]) -> Observable<Type> {
    return Observable<Type>.create { observer -> Disposable in
        let request = Alamofire.request(TypeAPI.Create(params: params).responseJSON { response in
            switch response.result {
            case .Success(let value):
                guard response.response?.statusCode != 409 else {
                    observer.onError(RequestError.TypeAlreadyExists)
                    return
                }

                guard let dict = value as? [ String: AnyObject ] else {
                    observer.onError(RequestError.ParsingError)
                    return
                }

                guard let parsedType: Type = try? Unbox(dict) else {
                    observer.onError(RequestError.MappingError)
                    return
                }

                observer.onNext(parsedType)
            case .Failure(let error):
                observer.onError(RequestError.convert(error))
            }
        }

        return AnonymousDisposable {
            request.cancel()
        }
    }
}
但是
rx\u请求
返回
可观察的
,我需要
可观察的
。如果我去添加
.flatMap
,那么我将再次完成
匿名处理


有什么建议吗?正确的方法是什么?我至少在附近吗?还是我完全走错方向了?

有什么发现。。。至少我想我得到了一些东西。它是有效的,现在我对这个解决方案很满意,所以让我们跳到结论

带有
.flatMap
的路径是正确的,但为了避免额外的
可见。create
我必须深入研究
RxAlamofire
并从这个漂亮的
rx_responseJSON
方法中获益
static func rx_create(params: [ String: AnyObject ]) -> Observable<Type> {
    let manager: Manager = Manager.sharedInstance
    manager.rx_request { manager -> Request in
        return Alamofire.request(TypeAPI.Create(params: params))
    }
}