У меня есть словарь. извлечь одно из его значений следующим образом:Objective-c указывает магию. Тип защиты
NSString *magicValue= [filterDict valueForKey:[filterDict allKeys][0]];
[SomeClass foo: magicValue];
И Foo является:
- (void)foo:(NSString*)magicValue
{
NSLog("magicValue is string:%@",[magic isKindOfClass:[NSString class]] ? @"YES" : @"NO");
NSLog("magicValue is number:%@",[magic isKindOfClass:[NSNumber class]] ? @"YES" : @"NO");
}
Если значение словаря является число magicValue будет NSNumber
. Таким образом, указанный указатель строки будет указывать на NSNumber
. Журнал вернет yes для проверки числа.
Я никогда не добавлял защиту таким методам, чтобы проверить, какой класс «magicValue» есть. Я предположил, что когда я определяю метод со строковым параметром, он будет строкой.
Должен ли я начинать учет такого поведения и всегда добавлять проверки, или это вина парня, который присвоил этому значению слова магии таким образом и использовал мой метод. Мне нужен совет по лучшим практикам и как справиться с этим.
Этот вопрос, возможно, уже был дан ответ, но я не знал, как его искать.