【发布时间】:2020-11-10 14:13:35
【问题描述】:
我环顾四周,虽然有一些相似的答案,但我找不到我特别要找的东西。
我的数据存储在 Firebase (Cloud Firestore) 中,我需要读回该数据,这很好并且可以正常工作。我的问题是我更改了文档文件路径的设置,通过在文件路径中添加随机生成的 id 来进一步提高安全性。
首先,这是否可以将通配符添加到 Xcode 中的文档路径中?其次,这可以作为一个字符串来完成吗?
我已经添加了下面的代码,包括文件路径。
提前致谢。
class getContactData : ObservableObject{
@Published var datas = [contactDataType]()
@AppStorage("selectedSchool") var selectedSchool: String = "selectedSchool"
init() {
let db = Firestore.firestore()
db.collection("/School Name/\(selectedSchool)/School Assets/**randomPath**/Contact Details").getDocuments { (snap, err) in
if err != nil{
print((err?.localizedDescription)!)
return
}
for i in snap!.documents{
let id = i.documentID
let adno = i.get("ID") as! String
let fullname = i.get("Full Name") as! String
let firstname = i.get("First Name") as! String
let lastname = i.get("Last Name") as! String
let registrationgroup = i.get("Registration Group") as! String
let priority1relation = i.get("Priority 1 Relation") as! String
let priority1fullname = i.get("Priority 1 Full Name") as! String
let priority1maintelephone = i.get("Priority 1 Main Telephone") as! String
let priority1mobile = i.get("Priority 1 Mobile") as! String
let priority2relation = i.get("Priority 2 Relation") as! String
let priority2fullname = i.get("Priority 2 Full Name") as! String
let priority2maintelephone = i.get("Priority 2 Main Telephone") as! String
let priority2mobile = i.get("Priority 2 Mobile") as! String
let priority3relation = i.get("Priority 3 Relation") as! String
let priority3fullname = i.get("Priority 3 Full Name") as! String
let priority3maintelephone = i.get("Priority 3 Main Telephone") as! String
let priority3mobile = i.get("Priority 3 Mobile") as! String
let priority4relation = i.get("Priority 4 Relation") as! String
let priority4fullname = i.get("Priority 4 Full Name") as! String
let priority4maintelephone = i.get("Priority 4 Main Telephone") as! String
let priority4mobile = i.get("Priority 4 Mobile") as! String
self.datas.append(contactDataType(id: id, adno: adno, fullname: fullname, firstname: firstname, lastname: lastname, registrationgroup: registrationgroup, priority1relation: priority1relation, priority1fullname: priority1fullname, priority1maintelephone: priority1maintelephone, priority1mobile: priority1mobile, priority2relation: priority2relation, priority2fullname: priority2fullname, priority2maintelephone: priority2maintelephone, priority2mobile: priority2mobile, priority3relation: priority3relation, priority3fullname: priority3fullname, priority3maintelephone: priority3maintelephone, priority3mobile: priority3mobile, priority4relation: priority4relation, priority4fullname: priority4fullname, priority4maintelephone: priority4maintelephone, priority4mobile: priority4mobile))
}
}
}
}
struct contactDataType : Identifiable {
var id : String
var adno : String
var fullname : String
var firstname : String
var lastname : String
var registrationgroup : String
var priority1relation : String
var priority1fullname : String
var priority1maintelephone : String
var priority1mobile : String
var priority2relation : String
var priority2fullname : String
var priority2maintelephone : String
var priority2mobile : String
var priority3relation : String
var priority3fullname : String
var priority3maintelephone : String
var priority3mobile : String
var priority4relation : String
var priority4fullname : String
var priority4maintelephone : String
var priority4mobile : String
【问题讨论】:
-
只需几个 cmets:查看 Firebase 的 Codable 支持 - 这将使将文档映射到应用程序的数据结构变得更加容易且不易出错:peterfriese.dev/swiftui-firebase-codable。此外,类名应以大写字母开头(请参阅google.github.io/swift)。我还建议不要在类名中使用动词。考虑使用
ContactsStore或ContactsRepository而不是getConatctData。最后但并非最不重要的一点 - 避免使用 Swift 的 force unwrap 运算符。 -
通过默默无闻的方法来保护您的安全:这根本不会让事情变得更安全。相反,您应该实施适当的安全规则以确保您的数据安全:firebase.google.com/docs/firestore/security/get-started
-
嗨,彼得,感谢您提供的信息!这是我的第一个应用程序,所以绝对是一个巨大的学习曲线。我会研究可编码的,我已经在努力展开力,因为我知道经过更深入的研究后它并不好。我已经实施了安全规则,而且从上传的角度来看,它们运行良好,因此我可以从学校上传,而不会篡改上传到另一个文档的路径(如果这有意义的话)。
-
可编码是前进的方向!谢谢@Peter Friese
标签: swift firebase google-cloud-firestore swiftui