Передайте тип универсальному расширению Swift или, в идеале, сделайте вывод

Скажи у тебя есть

 class Fancy:UIView

Вы хотите найти всех братьев и сестерFancy Просмотры.нет проблем...

    for v:UIView in superview!.subviews
        {
        if let f = v as? Fancy
            { f.hungry = false }
        }

Итак, попробуйте расширение,

public extension UIView
    {
    internal func fancySiblings()->([Fancy])
        {
            return (self.superview!
                .subviews
                .filter { $0 != self }
                .flatMap { $0 as? Fancy }
                )
        }
    }

Круто, теперь ты можешь

    for f:Fancy in self.fancySiblings()
        { f.hungry = false }

Фантастика.

Но,

Как обобщить это расширение для работы с любым подтипом UIView?В идеале может расширениевывести тип, четное? А также, принимая тип?

Итак, что-то вроде ...

public extension UIView
    {
    internal func siblings<T>( something T )->([T])
        {
            return (self.superview!
                .subviews
                .filter { $0 != self }
                .flatMap { $0 as? T }
                )
        }

и тогда вы могли бы назвать это как-то так ...

    for f in self.siblings(Fancy)
    for p in self.siblings(Prancy)
    for b in self.siblings(UIButton)

Как вы можете "сказать" универсальному расширению тип используемого типа, как это?

Кажется, вы можете "сделать вывод в обратном направлении",

public extension UIView
    {
    internal func incredible<T>()->([T])
        {
        return (self.superview!
         .subviews
         .filter { $0 != self }
         .flatMap { $0 as? T }
         )
        }


    for f:Fancy in self.incredible()

    for p:Prancy in self.incredible()

Что удивительно, но не работает по-другому.

Вы можете даже ...

    self.siblings().forEach{
        (f:Fancy) in
        d.hasRingOn = false
        }

Поэтому я все еще хотел бы знать, как «передать» тип что-то вродеfor f in self.siblings(Fancy) и, в идеале, даже сделать вывод, что это тоже.

Ответы на вопрос(2)

Ваш ответ на вопрос