2017-07-14 6 views
0

associatedtype EResult<T>の場合は、関数でプロトコルを拡張したいと考えています。プロトコル拡張句で引数なしのジェネリック型を使用する

extension SharedSequenceConvertibleType where E == Result { 

    func filterResult(success: Bool) -> RxCocoa.SharedSequence<Self.SharingStrategy, Self.E> { 
     return self.filter { result in 
      switch (result) { 
      case .Success(_): 
       return success 
      case .Failure(_): 
       return !success 
      } 
     } 
    } 
} 

enum Result<Element> { 
    case Success(Element) 
    case Failure(Swift.Error) 
} 

残念ながら、スウィフト、約Reference to generic type 'Result' requires arguments in <…>文句:私は何を達成したいことは、次のようなものです。推奨Fix-Itを適用してResult<Any>に変更した場合、Result<MyObject>'Result<LoginInfo>' is not convertible to 'Result<Any>'filterResultを使用することはできません。ご覧のとおり、実際にはのタイプは気にしません。

Swift 3でこれを達成する方法はありますか?

答えて

0

this threadを読んだ後、私はでResult<Element>をラップするプロトコルを使用してneccessaryように思われること考え出し以下の作品:。

extension SharedSequenceConvertibleType where E: ResultType { 

    func filterResult(success: Bool) -> RxCocoa.SharedSequence<Self.SharingStrategy, Self.E> { 
     return filter { result in return success == result.isSuccess } 
    } 
} 


protocol ResultType { 
    var isSuccess: Bool { get } 
} 

enum Result<Element>: ResultType { 
    var isSuccess: Bool { 
     switch self { 
     case .Success: 
      return true 
     default: 
      return false 
     } 
    } 

    case Success(Element) 
    case Failure(Swift.Error) 
} 
関連する問題