1

タイプと進行状況をラップするこの結果データ型が呼び出されました

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

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

これは構造体 (ObjectMapper)AnyObjectに変換する必要があるMappableため、これらの 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
        }
}

これはコンパイルできないため、上記の定義は間違っているようです。Cannot explicitly specialize a generic function

.flatMapLatest({ _ in
    .rx_request(Router.Pipeline)
})
.flatMapLatest({ result -> Observable<<ResponsePipeline>> in
    .rx_convert<ResponsePipeline>(result)
    // Cannot explicitly specialize a generic function
})

ここで何が間違っていますか?

4

1 に答える 1

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

に渡されたクロージャflatMapLatestは既に を返すように型指定されているためObservable<<ResponsePipeline>>、コンパイラは の型をrx_convertと推測できるため、呼び出しから<AnyObject> -> Observable<<ResponsePipeline>>ドロップできます。<ResponsePipeline>

于 2016-03-29T15:00:48.450 に答える