Получение универсального типа UIView из функции Swift - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь создать функцию, которая с учетом UIView рекурсивно повторяет все подпредставления, пока не найдет UIView типа T. Пока у меня есть:

func getType(from view: UIView) -> AdaptiveContainerView? {

    for aView in view.subviews {
        if let adapView = aView as? AdaptiveContainerView {
            return adapView
        }
        else {
            return getType(from: aView)
        }
    }

    return nil

}

Теперь япытаясь преломить функцию, чтобы она получала тип UIView и возвращала его, если он найден. Под типом UIView я имею в виду:

class MyView: UIView {}

Мой первый подход -

func getGenericType<T, Q:UIView>(from view: UIView, ofType: T) -> Q? {

    for aView in view.subviews {
        if aView is ofType {

        }
        ...
    }

    return nil

}

Однако у меня возникает следующая ошибка:

Use of undeclared type 'ofType'

Есть идеи?

Спасибо

1 Ответ

1 голос
/ 16 октября 2019

Для Статический

func getGenericType<Q:MyView>(from view: UIView) -> Q? {

    for aView in view.subviews {

        if let res = aView as? Q {

            return res
        }
        else {

            return getGenericType(from: aView)
        }

    }

    return nil
}

Вызов

let res = getGenericType(from: self.view) // res of type MyView 

Если вам нужно динамически отправить параметр

func getGenericType<T:UIView>(from view: UIView,type:T.Type) -> T? {

    for aView in view.subviews {

        if let res = aView as? T {

            return res
        }
        else {

            return getGenericType(from: aView,type:T.self)
        }

    }

    return nil
}

Звоните

let res = getGenericType(from: self.view,type:MyView.self)  // res of type MyView 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...