2016-10-31 3 views
0

Я пытаюсь распечатать первый объект в необязательном NSArray Я возвращаюсь из онлайн-базы данных. Ничего не напечатано. Не знаете, как развернуть необязательный NSArray в массив, который я могу индексировать. Прямо сейчас, только пытаясь распечатать первое значение в NSArray.Необязательный NSArray - Anyobject не имеет подстрочных индексов

fireBaseRef.observeSingleEventOfType(.Value, withBlock: { snapshot in 

       if !snapshot.exists() { return } 

       for item in snapshot.children { 
       print("This is the child value of reference", item.value["reference"]) 

        if let referenceObjects = item.value["reference"] { 
         print("This is the first value", referenceObjects[0]) //error is Anyobject? has no subscript members 
        } 

       } 

      }) 

Я получаю следующее

This is the child value of track-titles Optional(<__NSArrayM0x618000049000>(
The Chainsmokers - Don't Let Me Down (Illenium Remix), 
Flume - Say It ft. Tove Lo (Illenium Remix), 
The Chainsmokers Ft. Halsey - Closer (GhostDragon Remix), 
Major Lazer & Showtek - Believer, 
Fire, 
ONE DANCE -- DRAKE (feat. Wizkid & Kyla), 
Let Me Love You - Justin Bieber (Trap Edit) 
) 
) 
+0

Пожалуйста, добавьте результат, который вы сейчас получаете. –

+0

какой * есть * 'item.value [" reference "]'? Вы говорите о NSArray, но пытаетесь развернуть его как NSDictionary. – luk2302

+0

@ luk2302, это название дерева или ссылочного имени. Я получаю NSArray от .. Я использую firebase .. да не знаю, что я делаю там с NSDictionary ... – cnichs27

ответ

1

В соответствии с вашим кодом, referenceObjects является NSDictionary, не NSArray. Поэтому, когда вы просите referenceObjects [0] среда выполнения будет пытаться получить значение для ключа 0.

Если вы хотите извлечь NSArray, то что-то подобное должно работать:

if let referenceObjects = item.value["reference"] as? NSArray where !referenceObjects.isEmpty { 
    print("This is the first object: \(referenceObjects.first!)") 
} 

Надежда что помогает.

+0

@ cnichs27 Независимо от того, вам все равно нужно бросить. – Alexander

+0

@ АлександрМомчлов, вы правы! – cnichs27

-1

Снимок возвращался как дополнительный NSArray, поэтому вам нужно использовать условную форму downcasting, если этот объект равен нулю.

if let referenceObjects = item.value["reference"] as? NSArray { 
print(referenceObjects[0]) 
} 
+0

Хотя этот фрагмент кода может ответить на вопрос, он не дает никакого контекста, чтобы объяснить, как и почему. Подумайте о том, чтобы добавить предложение или два, чтобы объяснить ваш ответ. – brandonscript

+0

Не ответил ли мой ответ на ваш вопрос? Обратная связь приветствуется, поскольку я запутался. – Sparky

+0

Кроме того, ответ, который вы представили, не будет выполнен, если referenceObjects окажется пустым. – Sparky