2016-07-14 3 views
0

Я читаю данные из моментального снимка Firebase, который содержит массив. Я сбрасывал этот снимок как [String: AnyObject] в переменную say fetchedDict. Теперь я хочу, чтобы преобразовал sensorValues ​​в быстро читаемый массив. Я проверил dynamicType из sensorValues ​​Как преобразовать массив Firebase в Swift Array?

print(fetchedDict!["sensorValues"].dynamicType) 

Это Дополнительно
Я попробовал два подхода, чтобы преобразовать его в массив:

  1. понижающее приведение его к NSArray, [Int], но он не работал.
  2. Написал функцию зеркала (см. В конце), которая работала на детской площадке, но, к сожалению, не в приложении iOS. Это дало мне Не могу отличить значение типа «Swift.Array» (0x117a24028) с «Swift.Int».

Может кто-нибудь попросит меня решить эту проблему? Благодаря!

rootRef!.observeEventType(.Value, withBlock: { (snapshot) in 

     for child in snapshot.children.allObjects { 
      let snap = child as! FIRDataSnapshot 
      let fetchedDict = snap.value as? [String: AnyObject] 
}) 

Это fetchedDict:

[ 
    "activityDuration": 15; 
    "sensorValues": (
     5, 
     24, 
     24, 
     13, 
     22, 
     4, 
     42, 
     13, 
     3, 
     4 
    ); 
    "timestamp": 20160713184023; 
] 

Зеркало функция, которая не работала в приложении IOS. Пробовал Any, а также AnyObject как тип аргумента. Однако этот код работает на игровой площадке.

func tupleToArray(sensorValues: Any) -> [Int] { 
    let mirror = Mirror(reflecting: sensorValues) 
    var arr = [Int]() 
    for child in mirror.children{ 
     let stringedValue = (child.value) as! Int 
     arr.append(stringedValue) 
    } 
    return arr 
} 
+0

почему 'child.value'? почему не просто «ребенок как! Int'? –

+0

делает цикл, как эта работа? для i в fetchedDict! ["SensorValues"] as! Int –

+0

@ ÖzgürErsil Пробовал это тоже ... он дает предупреждение. Передача от ребенка к несвязанному типу «int» всегда терпит неудачу. И когда я вызываю функцию - выполнение прервано. –

ответ

3

Можете ли вы просто прочитать как NSArray, а затем создать массив Swift?

Учитывая

array_node 
    0: "index 0" 
    1: "index 1" 
    2: "index 2" 

и читать его

let myRef = self.myRootRef.childByAppendingPath("array_node") 
    myRef.observeSingleEventOfType(.Value, withBlock: { snapshot in 

     let a = snapshot.value as! NSArray 
     print(a) 

     let b = (a as Array).filter {$0 is String} 

     print(b) 
    }) 

выход

(
    "index 0", 
    "index 1", 
    "index 2" 
) 
[index 0, index 1, index 2] 
+0

Да, я мог бы ... но я повторяюсь через всех детей. Но теперь я понимаю, что могу использовать условную проверку с тем, что вы предложили. Благодаря! :) –

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