使用RxSwift的泛型转换方法的问题

时间:2016-03-29 10:48:37

标签: swift generics rx-swift objectmapper

我有这个结果数据类型,它包装了一个类型和一个进度

public enum <T> {
    case Success(T)
    case Progress(CGFloat)
}

class func rx_request(router: Router) -> Observable<<AnyObject>>

这个AnyObject需要转换为Mappable结构(ObjectMapper),因为我有几个这样的Mappable结构,我想实现这样的东西,我可以使用的通用映射:

class func rx_convert<T : Mappable>(value: <AnyObject>) -> Observable<<T>> {

        return Observable.create { observer in

            switch value {
            case .Success(let object):
                guard let convertedObject = Mapper<T>().map(object) else {
                    observer.onError(NetworkError.IncorrectDataReturned)
                    return NopDisposable.instance
                }

                observer.on(.Next(<T>.Success(convertedObject)))
                observer.on(.Completed)

            case .Progress(let progress):
                observer.on(.Next(<T>.Progress(progress)))
                break
            }

            return NopDisposable.instance
        }
}

上面的定义似乎是错误的,因为无法编译:{{1​​}}

Cannot explicitly specialize a generic function

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

.flatMapLatest({ result -> Observable<<ResponsePipeline>> in
    return .rx_convert(result)
})

因为传递给flatMapLatest的闭包已经被输入以返回Observable<<ResponsePipeline>>,所以编译器可以推断rx_convert的类型为<AnyObject> -> Observable<<ResponsePipeline>>,因此您可以删除<ResponsePipeline>来自电话。

相关问题