2016-07-14 69 views
0

我正在读取包含阵列的Firebase Data Snapshot中的数据。 我以[String:AnyObject]的形式将这个快照向下转换为变量say fetchedDict。现在我想将sensorValues转换为快速可读数组。我检查sensorValues的dynamicType如何将Firebase数组转换为Swift数组?

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:这在iOS应用没有工作

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

镜像功能。试过任何以及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

是否像这样的工作循环? for 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

是的,我可以..但我遍历所有的孩子。但现在我意识到我可以使用条件检查与你的建议。谢谢! :) –

相关问题