Swift 5.1 Предположим, я десериализирую некоторые данные. Я заинтересован в воссоздании тех же типов, которые были сериализованы, но некоторые могут включать дженерики. Рассмотрим следующий пример:
let layers = 4
let value: Int64 = 17
var output: Any
???SOMETHING???
print("\(type(of: output))") // "Optional<Optional<Optional<Optional<Int64>>>>"
Есть ли способ получить output
с типом времени выполнения Optional<...Optional<Int64>...>
, где число вложенных слоев Optional
равно layers
? (И не опирается, например, на жестко запрограммированные операторы case, полные классов.) Возможно, размышления, некоторые инициализаторы типов, о которых я не знаю, возможно, некоторые черные маги c используют указатели или object_setClass
или что-то еще?
Я бы также принял убедительные доказательства того, что это принципиально невозможно в Swift, например, документация, в которой говорится, что каждая спецификация класса c, используемого в программе, генерируется индивидуально во время компиляции, и, следовательно, вы не можете заново указать шаблон c класс во время выполнения. ... Хотя даже в этом случае это все еще возможно, учитывая такие вещи, как Java s ClassLoader
s.