2017-02-28 8 views
0

RXSwiftプロトコル、つまりOsbervableConvertibleTypeを拡張したいのですが、私は、その中にResultオブジェクトを持つOsbervableConvertibleTypesでのみ拡張メソッドを作成したいと思っています。今、結果は再び一般的です。しかし、私は拡張機能でジェネリック型を保持したいので、私の関数の戻り値の型も汎用的です。このようなもの:スウィフト3エクステンションがタイプに制限されました

extension ObservableConvertibleType where E: Result<T> { 
    public func asResultDriver() -> RxCocoa.SharedSequence<RxCocoa.DriverSharingStrategy, Result<T>> { 
     return self.asObservable() 
      .filter { $0.isSuccess } 
      .map { $0.value! } 
      .asDriver { _ in Driver.empty() } 
    } 
} 

スウィフト3では可能ですか?

ありがとうございます!

答えて

2

あなたがしたいことは可能ですが、Swift 3は汎用タイプの拡張機能をサポートしていないため、中間プロトコルを導入する必要があります。

protocol ResultType { 
    associatedtype Value 

    var isSuccess: { Bool } 
    var value: Value? 
} 

extension Result: ResultType { } 

これは、あなたがより多くを読みたい場合は、この技術に関する記事がたくさんあるあなたがObservableConvertibleType拡張子以内に使用することができますベースのプロトコルResultType

extension ObservableConvertibleType where E: ResultType { 
    public func asResultDriver() -> RxCocoa.SharedSequence<RxCocoa.DriverSharingStrategy, Result<E.Value>> { 
     return self.asObservable() 
      .filter { $0.isSuccess } 
      .map { $0.value! } 
      .asDriver { _ in Driver.empty() } 
    } 
} 

を与えますGoogleの周りに横たわっています。私が実際にそれを理解するのを助けたのはthis oneでした。

+0

これはまさに私が探していたものです。ありがとう! :) – szantogab

関連する問題