如何在用 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