如何在Swift中从Firestore获取对象数组?

时间:2019-03-27 01:10:40

标签: ios swift firebase google-cloud-firestore

在Swift中,要从Firestore检索数组,请使用:

currentDocument.getDocument { (document, error) in
  if let document = document, document.exists {
    let people = document.data()!["people"]
    print(people!)
  } else {
    print("Document does not exist")
  }
}

我收到的数据看起来像这样


(
  {
    name = "Bob";
    age = 24;
  }
)

但是,如果我只想检索名称,通常我会print(document.data()!["people"][0]["name"])

但是我得到的回复是Value of type 'Any' has no subscripts

如何访问people数组中该对象内的名称键?

2 个答案:

答案 0 :(得分:1)

document.data()!["people"]返回的值是Any类型的,因此您无法访问[0]上的Any

您首先需要将结果转换为数组,然后获取第一项。虽然我不是Swift专家,但应该是这样的:

let people = document.data()!["people"]! as [Any]
print(people[0])

答案 1 :(得分:0)

@Frank van Puffelen回答的更好的写法是:

currentDocument.getDocument { document, error in
  guard error == nil, let document = document, document.exists, let people = document.get("people") as? [Any] else { return }
    print(people)
  }
}

第二行可能会很长,但是可以防止出现任何可能的错误。