如何在用 SwiftUI 编写的 Firestore 中编写枚举?
How to write an Enum in Firestore written in SwiftUI?
我制作了一个小应用程序,其中有类别,在每个类别中我有不同的产品,可以很好地处理条形码数据,但现在我想在 Firestore 中编写它们并在我的应用程序中获取它们。
我有 2 个结构,一个用于产品:
struct Product : Identifiable, Hashable {
var id = UUID().uuidString
var type : ProductType
var title : String
var subtitle : String
var description : String = ""
var price : String
var productImage : String = ""
var quantity : Int = 1
}
还有一个类别类型
enum ProductType : String, CaseIterable {
case Wearable = "Wearable"
case Laptops = "Laptops"
case Phones = "Phones"
case Tablets = "Tablets"
}
这是我在 Firestore 中编写产品的方式:Picture 1,但我不知道如何编写枚举。
此外,这是我从 firestore 获取数据的方式,但我在以下位置遇到错误:
return Product(id: d.documentID, type: d["type"] as? String ?? ""
Cannot convert value of type 'String' to expected argument type 'ProductType'
func getData() {
FirebaseManager.shared.firestore.collection("products").getDocuments { snapshot, error in
if error == nil {
if let snapshot = snapshot {
DispatchQueue.main.async {
self.products = snapshot.documents.map { d in
return Product(id: d.documentID, type: d["type"] as? String ?? ""
, title: d["title"] as? String ?? "",
subtitle: d["subtitle"] as? String ?? "",
price: d["price"] as? String ?? "", productImage: d["productImage"] as? String ?? ""
)
}
}
}
}
else {
}
}
}
这是针对“Lore Ipsum 评论”
func getData() {
FirebaseManager.shared.firestore.collection("products").getDocuments { snapshot, error in
if error == nil {
if let snapshot = snapshot {
DispatchQueue.main.async {
self.products = snapshot.documents.compactMap { document in
try? document.data(as: Product.self)
} ?? []
}
}
}
else {
}
}
}
此外,这是我的 FirebaseManager :
class FirebaseManager : NSObject {
let auth : Auth
let storage : Storage
let firestore : Firestore
static let shared = FirebaseManager()
override init() {
self.auth = Auth.auth()
self.storage = Storage.storage()
self.firestore = Firestore.firestore()
}
}
问题,我如何将该枚举写入 firestore?
我认为它可以像这样工作
即使代码可读性降低
type: ProductType(rawValue: d["type"] as? String ?? "") ?? .Wearable // default value for ProductType
我制作了一个小应用程序,其中有类别,在每个类别中我有不同的产品,可以很好地处理条形码数据,但现在我想在 Firestore 中编写它们并在我的应用程序中获取它们。
我有 2 个结构,一个用于产品:
struct Product : Identifiable, Hashable {
var id = UUID().uuidString
var type : ProductType
var title : String
var subtitle : String
var description : String = ""
var price : String
var productImage : String = ""
var quantity : Int = 1
}
还有一个类别类型
enum ProductType : String, CaseIterable {
case Wearable = "Wearable"
case Laptops = "Laptops"
case Phones = "Phones"
case Tablets = "Tablets"
}
这是我在 Firestore 中编写产品的方式:Picture 1,但我不知道如何编写枚举。
此外,这是我从 firestore 获取数据的方式,但我在以下位置遇到错误:
return Product(id: d.documentID, type: d["type"] as? String ?? ""
Cannot convert value of type 'String' to expected argument type 'ProductType'
func getData() {
FirebaseManager.shared.firestore.collection("products").getDocuments { snapshot, error in
if error == nil {
if let snapshot = snapshot {
DispatchQueue.main.async {
self.products = snapshot.documents.map { d in
return Product(id: d.documentID, type: d["type"] as? String ?? ""
, title: d["title"] as? String ?? "",
subtitle: d["subtitle"] as? String ?? "",
price: d["price"] as? String ?? "", productImage: d["productImage"] as? String ?? ""
)
}
}
}
}
else {
}
}
}
这是针对“Lore Ipsum 评论”
func getData() {
FirebaseManager.shared.firestore.collection("products").getDocuments { snapshot, error in
if error == nil {
if let snapshot = snapshot {
DispatchQueue.main.async {
self.products = snapshot.documents.compactMap { document in
try? document.data(as: Product.self)
} ?? []
}
}
}
else {
}
}
}
此外,这是我的 FirebaseManager :
class FirebaseManager : NSObject {
let auth : Auth
let storage : Storage
let firestore : Firestore
static let shared = FirebaseManager()
override init() {
self.auth = Auth.auth()
self.storage = Storage.storage()
self.firestore = Firestore.firestore()
}
}
问题,我如何将该枚举写入 firestore?
我认为它可以像这样工作
即使代码可读性降低
type: ProductType(rawValue: d["type"] as? String ?? "") ?? .Wearable // default value for ProductType