【发布时间】: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