NSArray *nameOfArray = (NSArray*)dictionary[SOME_CONSTANT];
Если я прав, следующие строки читаются как: Поместите результат dictionary[SOME_CONSTANT]
в новый массив с именем nameOfArray
Если вы знаете Swift, а не Objective-C, вы можете подумать, что массивы являются типами значений, поэтому присвоение из одного массива в var
создает новый массив. Однако в Objective-C массивы имеют тип reference , и присвоение значения NSArray *
не создает новый массив, оно просто копирует ссылку на существующий массив.
Приведенная выше строка кода копирует значение, связанное с ключом SOME_CONSTANT
в словаре dictionary
, в переменную nameOfArray
, и это значение является ссылкой на массив. После этого назначения dictionary[SOME_CONSTANT]
и nameOfArray
ссылаются на тот же массив .
NSDictionary *nameOfDictionary = dictionary[SOME_CONSTANT];
и создайте новый словарь с именем nameOfDictionary
из значения dictionary[SOME_CONSTANT]
.
Как и выше, новый словарь не создается, эта строка делает то же самое, что и первый - она копирует ссылочное значение, хранящееся в словаре, в переменную, только в этом случае строка говорит, что значение является ссылкой на словарь .
Если две вышеупомянутые строки соответствуют тому, что на самом деле содержится в вашем коде, а не упрощенной версии, то у вас есть проблема: первая строка говорит, что dictionary[SOME_CONSTANT]
имеет значение NSArray *
, а вторая говорит, что она имеет значение NSDictionary *
- и что-то не может быть и словарем, и массивом. Однако вы продолжаете говорить в комментариях:
тип dictionary
равен [String,NSNumber]
, в котором говорится, что значения в словаре не являются ни NSArray
или NSDictionary
ссылками, но NSNumber
ссылками, но затем вы говорите:
И тип dictionary[SOME_CONSTANT]
= NSDictionary
Так что не NSArray
или NSNumber
...
Таким образом, у вас много несовпадений типов, и никто не сможет вам реально помочь, если вы не покажете действительный код, действительные типы всего и точно не объясните, с чем вы застряли. Не пытайтесь редактировать этот вопрос, у него уже есть отрицательный голос, задайте новый, сообщив детали, и, возможно, кто-то вам поможет. НТН