Intereting Posts
Автоматизация iPhone UI неограниченна для одного приложения CoreData, Magical Record и mogenerator Выход приложения со статусом 45 Измените ориентацию только для определенных контроллеров вида в ios swift 2.3 и swift 3 Странно, но просто понять ошибку … UIActivityIndicatorView stopAnimating не работает Как рассчитать размер изображения URL и создать `UICollectionCell` на основе размера изображения? Основные данные – запросы отношений Обнаружение программно установленного приложения Быстродействующий эквивалент статического выражения Objective-C Клавиатуры, отображаемые на разных представлениях, вызывают ошибку ограничения UIKeyboardLayoutAlignmentView iOS – Как перезаписать одну страницу PDF-файлов? Отказ Whitelist для PhoneGap при эмуляции из командной строки Как преодолеть цикл #import? Crosshatch в IOS с использованием CoreGraphics? Xcode 6 работает с отключенными модульными тестами

Имеет ли 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 чтобы сделать что-то вроде того, что вы хотите …