Получить тип от метатипа - PullRequest
0 голосов
/ 01 июня 2018

Я изо всех сил пытаюсь понять разницу между типами и метатипами в swift 4. В частности, я пытаюсь создать массив примерно так:

class A { ... }

class B {

    func doStuff() {
        let otherType = A.self
        let itemArr : [otherType] = // Objects of type A
    }

}

Это приводит к ошибке времени компиляции Use of undeclared type 'otherType' Я думаю, это происходит потому, что otherType на самом деле A.Type.Я думаю, что это может иметь какое-то отношение к Generics, но выгода в том, что тип может быть неизвестен во время компиляции ...

Есть ли решение этой проблемы?

1 Ответ

0 голосов
/ 01 июня 2018

Swift является мощным средством, поскольку вы можете передавать типы в качестве параметров и создавать переменные типов.Это привлекательно, но все же, есть лучшее решение для вашей проблемы.

Определите protocol CustomArrayPopulatable {} И добавьте это ко всем подклассам / классам, которые могут быть добавлены в массив.EG A1: CustomArrayPopulatable;A2: CusstomArrayPopulatable.

С помощью универсальных типов вы можете добиться большой абстракции.Однако имейте в виду, что если вам понадобится привести к конкретному подтипу позже, вам нужно будет привести его к себе, например: if type as? A1 {...}, поэтому используйте осторожно дженерики и подумайте, прежде чем начать, действительно ли они вам нужны.

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