Подтвердить что ты не робот

Быстрый эквивалент @encode

Существует ли Swift эквивалент Objective-C @encode?

Например

@encode(void *) // -> @"^v"

Поиск ничего не дал.

4b9b3361

Ответ 1

Нет, нет - потому что под капотом классы Swift не используют конструкцию Objective-C для выполнения своей работы. Нет необходимости вычислять это (например, в Objective-C) для передачи/вызова данных.

Однако, если вам нужно динамически использовать его во время выполнения (например, для взаимодействия с существующими методами Objective-C), вы можете либо создать вызов Objective-C и передать объект через или (для простых типов) написать поиск таблица.

Типовые кодировки перечислены в https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html, которые имеют карту, и можно написать оператор типа switch, который выполняет поиск.

Но в принципе, если у вас есть тип, который вы хотите передать, и найти его объективный тип кодирования c, вы можете использовать метод objCType NSObject:

var i = 1 as NSNumber
String.fromCString(i.objCType)! == "q" 

Если вам все равно нужно передать его как ненамеренную строку C, вам может даже не понадобиться преобразовать его в строковый тип Swift.