Как правильно расширить RxCocoa.Driver? - PullRequest
0 голосов
/ 05 мая 2020

Я бы хотел расширить Driver<[String]?> следующим образом:

extension Driver where E == Array<String>? {

    var dashedLabel: UILabel {
        let label = UILabel()
        map({ $0?.joined(separator: "-") }).drive(label.rx.text)
        // yes, the above is never disposed
        // what I am interested about is this error:
        // Referencing instance method 'drive' on
        // 'SharedSequenceConvertibleType'
        // requires the types
        // 'SharedSequence<S, Optional<Array<String>>>.SharingStrategy'
        // (aka 'S') and 'DriverSharingStrategy' be equivalent
        return label
    }

}

Когда я расширяю его таким образом extension Driver where S == DriverSharingStrategy, E == Array<String>?, ошибка исчезает. Почему мне нужно ограничивать S, когда Driver уже ограничивает его до DriverSharingStrategy:

public typealias Driver<E> = SharedSequence<DriverSharingStrategy, E>
public struct SharedSequence<S: SharingStrategyProtocol, Element> : SharedSequenceConvertibleType
...