Как преобразовать этот код obj-c в swift (NSArray с NSDictionary) - PullRequest
0 голосов
/ 29 марта 2019

Итак, я пытаюсь преобразовать некоторый код obj-c в swift, и я натолкнулся на это, что я не понимаю, как конвертировать в swift.

Если я прав, следующие строки читаются как: Поместите результат dictionary[SOME_CONSTANT] в новый массив с именем nameOfArray и создайте новый словарь с именем nameOfDictionary из значения dictionary[SOME_CONSTANT].

NSArray *nameOfArray = (NSArray*)dictionary[SOME_CONSTANT];

NSDictionary *nameOfDictionary = dictionary[SOME_CONSTANT];

1 Ответ

0 голосов
/ 30 марта 2019
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 ...

Таким образом, у вас много несовпадений типов, и никто не сможет вам реально помочь, если вы не покажете действительный код, действительные типы всего и точно не объясните, с чем вы застряли. Не пытайтесь редактировать этот вопрос, у него уже есть отрицательный голос, задайте новый, сообщив детали, и, возможно, кто-то вам поможет. НТН

...