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

Проверьте, определена ли константа во время выполнения в Obj-C

К примеру, переменные доступа в структурах NSDictionary Cocoa часто определяют ключи, например UIKeyboardBoundsUserInfoKey. Как я могу проверить, определен ли ключ во время выполнения? Я нашел примеры того, как проверять классы и функции, но не на константы.

4b9b3361

Ответ 1

Ответ Jasarien примерно правильный, но подвержен проблемам в LLVM 1.5, где компилятор будет оптимизировать if-statement.

Вы также должны сравнивать адрес константы с NULL, а не nil (nil имеет другую семантику).

Более точное решение таково:

BOOL isKeyboardBoundsKeyAvailable = (&UIKeyboardBoundsUserInfoKey != NULL);
if (isKeyboardBoundsKeyAvailable) {
  // UIKeyboardBoundsUserInfoKey defined
}

Ответ 2

Проверьте указатель на нуль, например

if (&UIKeyboardBoundsUserInfoKey != nil)
{
    //Key exists
}