0

Может кто-нибудь пожалуйста, скажите мне точную разницу между этими двумя синтаксисом, я нашел его совпадениемDiffence между два синтаксиса для NSMutableDictionary

Structre как это:

-> NSMutableArray (CategoryAry) 
    ...> NSMutableDictionary (multiple number of dictionaries) 


NSLog(@"%@",[(NSMutableDictionary *)[CategoryAry objectAtIndex:indexPath.row+1] valueForKey:@"status"]); 
NSLog(@"%@",(NSMutableDictionary *)[[CategoryAry objectAtIndex:indexPath.row+1] valueForKey:@"status"]); 

Хотя и напечатать такие же результаты.

ответ

1
[(NSMutableDictionary *)[CategoryAry objectAtIndex:indexPath.row+1] valueForKey:@"status"]); 

«objectAtIndex» разливается на NSMutableDictionary *, то значение «статус» ищется внутри него.

(NSMutableDictionary *)[[CategoryAry objectAtIndex:indexPath.row+1] valueForKey:@"status"]); 

Объект «Статус» разливаются на NSMutableDictionary *

Первый вызовом является только правильным синтаксисом.

Для второго, почему это работает?
метод valueForKey вызывается на id, и, поскольку он кажется словарем, он работает и возвращает исчерпывающий результат. Затем по этому результату метод «description» вызывается (@ «% @»), и поскольку этот метод существует для любого объекта, приведение результата в NSMutableDictionary не приводит к ошибке. Этот метод вызывается в возвращаемом подклассе, и этот возврат отображается в NSLog.

Я предполагаю, что для второго вызова у вас может быть предупреждение о компиляторе?

+0

nopes для второго ... он никогда не показывал мне никаких предупреждений, и оба печатают те же результаты на консоли. Я могу получить доступ к словарю любым способом. –

+0

@ Ajay Sharma: Кажется, компилятор достаточно умен, чтобы проверить, что :-) – Oliver