Проверка метатипа, полученного в качестве аргумента - PullRequest
1 голос
/ 18 апреля 2019

Классы Vc1 и Vc2 являются подклассами UIViewController:

class Vc1: UIViewController { .... }
class Vc2: UIViewController { .... }

Следующая функция проверяет тип отправителя, полученный в качестве аргумента:

func onVCComplete(senderType: UIViewController.Type, details: Any) {

    switch senderType {
        case Vc1.self: ...            
        case Vc2.self: ...
        default: break
    }
}

, что дает ошибку компиляции: Expression pattern of type 'Vc1.Type' cannot match values of type 'UIViewController.Type'.

Пробовал Any.Type вместо UIController.Type - та же ошибка.

Какой правильный синтаксис?

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Полагаю, возможно, вы намереваетесь создать экземпляр vc, проверить его тип и выполнить некоторую дополнительную работу над ним ... Если так, то почему бы просто не создать объект, а затем проверить его тип?

import UIKit

class Vc1: UIViewController {}

class Vc2: UIViewController {}

func onVCComplete<T: UIViewController>(senderType: T.Type, details: Any) {

    let vc = senderType.init()

    switch vc {
    case is Vc1:
        print("do something with Vc1")
    case is Vc2:
        print("do something with Vc2")
    default:
        print("some other vcs")
    }
}

onVCComplete(senderType: Vc1.self, details: "Whatever")

Надеюсь, это поможет.

0 голосов
/ 18 апреля 2019

Проверьте ниже образец, чтобы проверить. Это может помочь вам.

class A {

}

class B : A {

}

class C : A {

}

func onVCComplete(senderType: A, details: Any) {

    if senderType is B {
        print("B")
    }
    if senderType is C {
         print("C")
    }
}

onVCComplete(senderType: C(), details: "A")

Будет напечатано "C"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...