2015-06-13 4 views
0

Я довольно пустой, когда дело доходит до быстрой, я разрабатываю с использованием Obj-c. Но учебник, который я использовал, использует Swift. Может ли кто-нибудь помочь мне преобразовать следующую строку Swift в Objective-C. Это в основном загрузить String в массив.Строка кода от Swift до Objective-C

self.iDArray.append(objectIDs[i].valueForKey("objectId") as! String) 
+0

Можете ли вы добавить строки, отображающие типы и конструкции iDArray & objectIDs? – Laurent

ответ

0
self.iDArray.append(objectIDs[i].valueForKey("objectId") as! String) 

Должен быть

[self.iDArray append: [objectIDs[1].valueForKey: @"objectID"]] 

Однако Swift код сила литья [objectIDs[1].valueForKey: @"objectID"] к типу String (Срочная строка).

Это подсказывает мне, что self.iDArray может быть массивом Swift. Быстрые массивы обычно содержат только один тип. Вы создаете массив объектов String или массив объектов Dictionary. Вы также можете создать массив из AnyObject.

NSArray - это массив из id.

Я не на 100% уверен, как принудительно применять для строкового типа в Objective-C. может быть:

[self.iDArray append: (String) [objectIDs[1] valueForKey: @"objectID"]] 
+0

Эй, спасибо за ваш ответ :). Я дал ему шанс, и я получаю следующую ошибку. Свойство 'valueForKey' не найдено на объекте типа 'id'. Также я использую NSMutableArray. –

+0

Можете ли вы опубликовать полный тестовый пример? Это поможет. – Laurent

+0

Это опечатка. Замените '.' Перед 'valueForKey:' пробелом. –

0

На поверхности ObjectIds [х], как представляется, словарь, и компилятор выдаст вам перерыв на типах если вы разыменования это таким образом. Так наивно разобрать, годный к употреблению синтаксис будет:

[self.iDArray append:objectIDs[1][@"objectId"]]; 

Но это неправильно семантический для синтаксического анализа, так как подразумевается, что массив ObjectIds подразумеваются содержать синтаксический анализ объекты (именованные смешение с суффиксом «ИД»). Если это действительно разобрать объекты, то ссылка коллекции стиль ObjectId не будет работать, и должна быть вместо

[self.iDArray append:((PFObject *)objectIDs[1]).objectId]; 

Или более читаемо:

PFObject *object = objectIDs[1]; 
NSString *objectId = object.objectId; 
[self.iDArray append:objectId]; 

Но, по той же схеме семантически, прикосновенность кода является то, что это добавление к NSMutable массива, так что, вероятно, должно быть - для любого из вышеуказанных предложений:

[self.iDArray addObject: ..... 

Прекратите читать здесь, если вы заботитесь только о компиляции и выполнении без сбоя.

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

Моя практика, где это возможно, просто сохранить и передать весь PFObject. Вы всегда можете спросить его об объекте, позже. Более убедительно, мое правило по чтению кода: показать мне parse.com код, который много относится к objectIds - за исключением таких вещей, как тесты равенства - и я покажу вам ошибку дизайна.

+0

Эй! Впечатление: D. Итак, я пытался обойтись, мне удалось получить objectId из Parse в виде строки. Теперь я пытаюсь вставить объект: atIndex :. Кажется, все будет хорошо, пока я не попытаюсь Log array и получить (null) в качестве массива –

+0

Надеюсь, вы получите objetId санкционированный путь с '.objectId' и рассмотрите вставку как' addObject: ', которая больше похожа на append, чем insertObject : atIndex (если индекс не подсчитывается-1, и в этом случае они идентичны, а addObject более кратким). – danh

+0

Хорошо, перейдя с addObject. Но ясно, что я делаю что-то неправильно, если я NSLog [iDArray objectAtIndex: 1] Я получаю (null) :( –

Смежные вопросы