ios - Firebase 写入复杂数据

标签 ios swift xcode firebase firebase-realtime-database

大家好,我是 Swift 开发的新手,刚开始使用 Google 的 firebase 数据库。 我在按照我想要的方式构建 JSON 树时遇到了一些麻烦,首先是因为我正在使用创建唯一 ID 的 .childByAutoId() 函数,目前效果很好,但如果我想将它命名为数据库中的“位置”?

其次,我真正的问题是我想在我的每个 Locations 中有一个嵌套的 Links 数组,由 2 个字符串组成。所以我尝试过使用元组,但 Firebase 不喜欢那样。可能是一个愚蠢的解决方案。无论如何,我查阅了 firebase 文档并在尝试使用它时遇到了一堆编译错误......

在我的每个“位置”中构造嵌套“链接”数组的正确语法是什么,或者基本上是在 firebase 中创建复杂 JSON 的有效方法。 这是我的实验代码:

class func pushToFirebase(){

    let latitude = "33.333333"
    let longitude = "33.333333"
    let title = "foobar"
    let link = ("linkTitle","linkUrl")
    let link1 = "link"
    let links = [link, link1]

    let post:[String : AnyObject] = [
        "latitude":latitude,
        "longitude":longitude,
        "title":title,
        "links":links
    ]

    let firebaseRef = FIRDatabase.database().reference()
    firebaseRef.child("Locations").childByAutoId().setValue(post)   
}

desired structure

最佳答案

始终避免在 firebase 数据库中使用元组数组。首选使用字典 创建你想要的 JSON 树:-

class func pushToFirebase(){

let latitude = "33.333333"
let longitude = "33.333333"
let title = "foobar"
let link = ("linkTitle","linkUrl")
let link1 = "link"
let links = [link, link1]

let post:[String : AnyObject] = [
    "latitude":latitude,
    "longitude":longitude,
    "title":title,
    "links":links
]
   //To create Locations 
let firebaseRef = FIRDatabase.database().reference()
firebaseRef.child("Locations").childByAutoId().setValue(post)  




  //To create create Links

func createLinks(linkTitle : String!,linkURL : String!){
      let selfUniqueGeneratedId = String(Int(NSDate.timeIntervalSinceReferenceDate() * 1000))
                 //Will give you a unique id every second it is called (or maybe millisecond too)

      firebaseRef.child("Locations").child("Links").child(selfUniqueGeneratedId).setValue([link_title : linkTitle,
      link_url : linkURL ])

   }   
}

您无法控制 Locations 对象,因为它们是使用 childByAutoId 创建的,这就是为什么它具有 ..Auto.. 的原因... ;)

但是你肯定可以用这段代码读取那些 AutoId....

func retrieveFirebaseDB(){

 firebaseRef.child("Locations").observeEventType(.Value, withBlock: {(Snapshot) in

  if Snapshot.exists(){
          if let locationDict = Snapshot!.value as! [String:AnyObject] {
            for each in locationDict as [String:AnyObject]{
                  let locationID = each.0
               //Here you are retrieving every locationID in your node Locations, GO CRAZY...!
         }
       }
     }
  })

 }

关于ios - Firebase 写入复杂数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38960859/

相关文章:

xcode - 如何在新的 xCode 中禁用 "Add explicit braces to avoid dangling else"?

swift - 阻止相同的随机 int 连续出现两次

iphone - 在iOS上,使用NSURLConnection时如何缓存更大的文件(1MB)?

ios - Firebase 消息不在 iOS 上 - FIRMessaging 收到数据消息,但 FIRMessagingDelegate 的消息 :didReceiveMessage: not implemented

ios - 使用 ResearchKit 以编程方式呈现 ORKTaskViewController

ios - 将远程数据与本地对象映射/解耦

objective-c - Swift 中的 self 和 unowned self 有什么区别?

swift - Playground Xcode 永远不会停止运行,有什么想法吗?

ios - 如何更改 ARKit 更新函数频率 (FPS)?

objective-c - Macos x 应用程序的快捷方式