Хорошо, у меня такое чувство, что вы, ребята, сможете быстро указать, почему я так растерялся по этому поводу, но у меня есть вопрос, почему следующее НЕ приводит к ошибке или предупреждению компилятора:
NSString * intValue = [ NSString stringWithFormat:@"int = %i", [ [ self.selectedObject valueForKey:name ] integerValue ] ];
selectedObject
- это NSObject
, а name
- это имя @property
типа int
.
Что меня озадачивает, так это то, что компилятор вполне готов предположить, что возвращаемый результат [ self.selectedObject valueForKey:name ]
имеет тип NSNumber *
(без его типизации), чтобы связать сообщение с вызовом integerValue
.
Очевидно, что KVC объединяет необъектные «числовые» типы в NSNumber
, но компилятор не может знать, что -valueForKey:
вернет NSNumber *
в данном конкретном случае.
Почему это не приводит к тому, что предупреждение компилятора в строках "id
может не отвечать на" -integerValue
""?