Skocz do zawartości

Witaj!

Zaloguj lub Zarejestruj się aby uzyskać pełny dostęp do forum.

Zdjęcie
- - - - -

Rozszerzenie tablicy generycznych obiektów


  • Zaloguj się, aby dodać odpowiedź
Brak odpowiedzi do tego tematu

#1 OneGhost

OneGhost
  • 296 postów

Napisano 07 października 2016 - 17:48

Chciałbym napisać rozszerzenie do tablicy która zawiera elementy, które są generyczne. Nie chodzi tylko o to, że ma to być rozszerzenie dla tablicy obiektów danego typu, ale też same obiekty tablicy mają być generyczne. Próbowałem napisać to mniej więcej tak:

 

class Observer<Type> {

    private(set) weak var observer: AnyObject?

    private(set) var listener: (_ value: Type) -> ()

    

    init(observer: AnyObject, listener: @escaping (_ value: Type) -> ()) {

        self.observer = observer

        self.listener = listener

    }

}

 

extension Collection<T> where Iterator.Element == Observer<T> {

    func foo(value: Iterator.Type) {

        forEach { $0.listener(value) }

 

    }

}

 

No niestety to nie przechodzi. Później chciałbym móc używać tego w taki sposób:

 

let observers = [Observer<Int>]()

observers.forEach { $0.foo(4) }

 

Czy ktoś zna jakiś sposób w jaki mogę zdefiniować takie rozszerzenie?

 

EDIT:

Udało się to rozwiązać z pomocą stackoverflow. Poniżej przykład:

protocol Observing {

    associatedtype T

    var listener: (_ newValue: T) -> () { get }

}

 

class Observer<T>: Observing {

    private(set) weak var observer: AnyObject?

    private(set) var listener: (_ value: T) -> ()

    

    init(observer: AnyObject, listener: @escaping (_ value: T) -> ()) {

        self.observer = observer

        self.listener = listener

        

    }

}

 

extension Collection where Iterator.Element: Observing {

    func foo(value: Iterator.Element.T) {

        forEach { $0.listener(value) }

    }

}

 

Można zamknąć.


Użytkownik Damian Dudycz edytował ten post 07 października 2016 - 17:49





Użytkownicy przeglądający ten temat: 6

0 użytkowników, 6 gości, 0 anonimowych