Intereting Posts
GPUImage удваивает размер изображения – iOS / Swift Является ли настройка UISearchField частной Не удается увидеть элемент навигации для панели навигации в контуре сцены или раскадровке? Поделиться в google с помощью GTLServicePlus с GIDAuthentication Как изменить имя кнопки панели динамически Хранение пользовательских объектов как NSDictionary vs NSData Ограничения для универсальной раскадровки на iPhone изменение NSHTTPCookie создало время Создание социального приложения iOS с нуля CGContextDrawImage рисует большие изображения, очень размытые Сообщение об ошибке «Ожидаемый; после объявления верхнего уровня '' Неизвестный тип импорта имени 'с мостом для использования Swift в Objective-C Как получить значения из alertview Как показать UIPickerView с помощью диалога Monotouch? построить проект xcode на jenkins с помощью сервера ubuntu Вызов данных перезагрузки при прокрутке по UIScrollView

Имеет ли Objective-C метод (или C-функцию), возвращающий спецификатор формата объекта для данного объекта?

Я хочу написать свой собственный метод, чтобы упростить проверку переменных, чем у меня с NSLog. Я хочу, чтобы это была оболочка вокруг NSLog, поэтому мне нужно как-то распознать правильный спецификатор формата для любого объекта, переданного моему методу.

Было бы неплохо иметь такой метод, как format_specifier_for, который мог бы сделать следующее:

format_specifier_for(1) => %d format_specifier_for(@1) => %@ and so on... 

ОБНОВИТЬ:

Помимо принятого ответа (он отвечает на исходный вопрос) есть два возможных подхода к проблеме:

  1. Из ответа Гийома: используйте метод LOG_EXPR от http://vgable.com/blog/2010/08/19/the-most-useful-objective-c-code-ive-ever-written/ .
  2. Использовать перегружаемый атрибут при определении методов, описанных здесь: Как проверить, является ли переменная объектом?

Я думаю, что идеальное решение могло бы заимствовать оба варианта.

Нет, такая функция не может быть такой, поскольку вы всегда можете использовать несколько спецификаторов формата (для каждого из них) для одного и того же типа данных. Например, вы можете использовать %@ для печати значения NSString или %p для получения адреса в памяти.

Посмотрите на это: Самый полезный код Objective-C, который я когда-либо писал . Автор использует оператор C typeof и директиву Objective-C @encode чтобы сделать что-то вроде того, что вы хотите …