К примеру, переменные доступа в структурах NSDictionary Cocoa часто определяют ключи, например UIKeyboardBoundsUserInfoKey. Как я могу проверить, определен ли ключ во время выполнения? Я нашел примеры того, как проверять классы и функции, но не на константы.
Проверьте, определена ли константа во время выполнения в Obj-C
Ответ 1
Ответ Jasarien примерно правильный, но подвержен проблемам в LLVM 1.5, где компилятор будет оптимизировать if-statement.
Вы также должны сравнивать адрес константы с NULL, а не nil (nil имеет другую семантику).
Более точное решение таково:
BOOL isKeyboardBoundsKeyAvailable = (&UIKeyboardBoundsUserInfoKey != NULL);
if (isKeyboardBoundsKeyAvailable) {
// UIKeyboardBoundsUserInfoKey defined
}
Ответ 2
Проверьте указатель на нуль, например
if (&UIKeyboardBoundsUserInfoKey != nil)
{
//Key exists
}