【问题标题】:Firebase Firestore for Swift doesn't seem to be reaching Google Cloud适用于 Swift 的 Firebase Firestore 似乎没有到达 Google Cloud
【发布时间】:2021-04-14 15:40:55
【问题描述】:

我正在尝试在我的 Swift 应用程序上实现 Firestore,但我遇到了一些小问题。

我正在使用此函数将Event 对象作为文档添加到Events 集合中。该功能似乎正在工作,因为我收到了返回给我的文档 ID,但是通过 Firebase 控制台,我只能看到我从控制台添加的文档。

func addEvent(event: Event){
    print("")
    print("Running addEvent()")
    print(event.toArray())
    var ref: DocumentReference? = nil
    ref = db.collection("Events").addDocument(data: event.toArray())
        { err in
                if let err = err {
                    print("Error adding document: \(err)")
                } else {
                    print("Document added with ID: \(ref!.documentID)")
                }
            }
    print(ref?.documentID)
}

为了确保这不是 Firestore 规则,我将其设置为接受所有传入连接

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

如果您需要了解

我有以下代码来调用该函数(在一个 viewDidLoad() 中,当应用程序加载时,它会被正确调用):

let ch = CalendarHandler()
let event = Event("nil", title: "Test", date: "1", month: "4", year: "2021", start: "12:00", end: "13:00", count: "0", creator: "me", privacy: "1", allDay: "1")
ch.addEvent(event: event)

当函数被调用时,控制台会输出这个:

Running addEvent()
["day": "1", "month": "4", "start": "12:00", "year": "2021", "isPrivate": true, "count": "0", "title": "Test", "isAllDay": true, "end": "13:00", "creator": "me"]
Optional("Ig8yw85mvm1oFsGhaYDc")

谁能看到我哪里出错了? 如果不是代码,有谁知道可能是什么原因造成的?

谢谢:)

编辑

这里要求的是Event 类

class Event{
let id: String
var title: String?
var date: String?
var month: String?
var year: String?
var start: String?
var end: String?
var creator: String?
var notes: String? = nil
var count: String = "0"
var invitees:[String] = []
var location: String? = nil
var canInvite: Bool = false
var isPrivate: Bool = false//false = visible, true = "busy"
var isUserInvited: Bool = false
var isAllDay: Bool = true

init(){
    id = "0"
}

init(_ id: String, title: String, date: String, month: String, year: String, start: String, end: String, count: String = "0", creator: String, privacy: String, allDay: String) {
    self.id = id
    self.title = title
    self.date = date
    self.start = start
    self.end = end
    self.creator = creator
    
    self.month = month
    self.year = year
    
    self.count = count
   //MARK: Re-implement these functions 
   // setPrivacy(Int(privacy)!)
   // setAllDay(Int(allDay)!)
    
   // isInvitee()
    
}

public func toArray() -> Dictionary<String,Any>{
    var ev = Dictionary<String,Any>()
    ev["title"] = title
    ev["day"] = date
    ev["month"] = month
    ev["year"] = year
    ev["start"] = start
    ev["end"] = end
    ev["creator"] = creator
    ev["notes"] = notes
    ev["count"] = count
    //ev["invitees"]
    ev["isPrivate"] = isPrivate
    ev["isAllDay"] = isAllDay
    return ev
}

【问题讨论】:

  • 您是否正在尝试将数组 .addDocument(data: event.toArray() 写入 Firestore 或其他内容?
  • 是的,event.toArray() 返回一个看起来像 [String:Any] 的数组
  • 数组中只有布尔值、字符串和整数
  • 您能否在问题中包含事件模型。它可能与问题无关,但有利于完整性。
  • 你的 toArray 返回一个字典,而不是一个数组。

标签: ios swift firebase google-cloud-firestore


【解决方案1】:

问题中的代码基本上可以正常工作,但被错误标记会造成混乱。这是对可以返回数组或字典的 Event 类的重做。

struct Event {
    let title: String!
    let date: String!
     let month: String!

    func toArray() -> [String: String] {
        let array = [
            "title": title,
            "date": date,
            "month": month,
        ]

        return array as! [String : String]
    }

    func toDict() -> Dictionary<String, Any> {
        var ev = Dictionary<String, Any>()
        ev["title"] = self.title
        ev["data"] = self.date
        ev["month"] = self.month

        return ev
    }
}

然后填充一个事件对象

let event = Event(title: "Test", date: "1", month: "4")

然后将其作为数组存储在 Firebase 中

ref = db.collection("Events").addDocument(data: event.toArray())

然后作为字典

ref = db.collection("Events").addDocument(data: event.toDict())

然后在 firebase 中检查结果 - 你会看到它们产生相同的结果

数组中的内容是一系列键:值对,而字典中的内容很好,一个包含一系列键:值对的字典。

【讨论】:

    猜你喜欢
    • 2020-04-04
    • 2021-10-06
    • 2021-11-05
    • 2022-10-05
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多