Найти универсальный тип, переданный в функцию - PullRequest
0 голосов
/ 08 февраля 2019

Я создал универсальную функцию, которая передает один конкретный тип и другой тип 'универсальный'.

func initializeCategory<T: UIView> (category: Category, type: T) {

//Find which type 'type' is

//If type is of type, 'UIView' -> do something
//else if type is of type, 'Category' or another type -> Do something else

}

Что я пытаюсь сделать, это найти, какой тип передается в качестве универсального типа в моей функции?

Есть ли лучший способ создать универсальную функцию, которая может запрашиватьразличные типы переданы в него?

Или я должен установить его следующим образом: <T: Any> ??

PS Категория является подклассом UIView

Спасибо

ОБНОВЛЕНИЕ

По сути, я пытаюсь выполнить универсальную функцию ограничения.

Вот ограничения:

        view.addSubview(categoryOne)
        categoryOne.delegate = self
        categoryOne.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 16).isActive = true
        categoryOne.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16).isActive = true
        categoryOne.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16).isActive = true

        categoryOne.heightConstraint = categoryOne.heightAnchor.constraint(equalToConstant: 40)
        categoryOne.heightConstraint?.isActive = true

Что мне нужно, так это возможность изменить ограничение 'top Anchor'.Поэтому, если я передам тип UIView, он будет установлен как is = constraint(equalTo: view.safeAreaLayoutGuide.topAnchor и т. Д.

Однако, если я передам тип Category (который является подклассом UIView), то мне нужно изменить ограничение (equalTo: category.bottomAnchor и т. д.

- Я подумал, что если у меня есть общая функция, которая запрашивает, какой тип передается, я мог бы получить результат.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

РЕШЕНО

func initializeCategory (category: Category, type: UIView) {
        view.addSubview(category)
        category.delegate = self

    if type == view {
        category.topAnchor.constraint(equalTo: type.safeAreaLayoutGuide.topAnchor, constant: 16).isActive = true
    } else {
        category.topAnchor.constraint(equalTo: type.bottomAnchor, constant: 16).isActive  = true
    }

    category.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16).isActive = true
    category.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16).isActive = true

    category.heightConstraint = category.heightAnchor.constraint(equalToConstant: 40)
    category.heightConstraint?.isActive = true
}
0 голосов
/ 08 февраля 2019

Не используйте type в качестве аргумента, так как это ключевое слово.Следующий код работает.

func initializeCategory<T: UIView> (category: Category, type1: T) {


 let a =   type(of :type1)
    print(a)

 }

    or 


   switch  type1 {
    case  is SKView:
            print(1)
    default:
        print(2)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...