2017-02-28 7 views
0

RXSwift 프로토콜, 즉 OsbervableConvertibleType을 확장하고 싶습니다만, 결과 개체가있는 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 확장

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() } 
    } 
} 

당신이 더 읽고 싶다면 내에서 사용할 수 있습니다 기본 프로토콜 ResultType을 제공,이 기술에 대한 기사가 많이있다 구글 주위에 거짓말. 그것을 이해하는데 정말로 도움이 된 것은 this one입니다.

+0

그게 내가 찾고있는 것입니다. 감사! :) – szantogab