簡體   English   中英

類型 '' 不符合協議 'Decodable'/'Encodable'

[英]Type '' does not conform to protocol 'Decodable'/'Encodable'

我有這段代碼可以從 firestore 獲取信息:

 struct Spty: Identifiable, Codable{
   @DocumentID var id: String? = UUID().uuidString
   var spty: String
   var r: NSNumber
   var g: NSNumber
   var b: NSNumber
}

 class SptyViewModel: NSObject, ObservableObject{
   @Published var specialities = [Spty]()
   @Published var search = ""
     func fetchData(){
      let db = Firestore.firestore()
        db.collection("specialities").addSnapshotListener { (querySnapshot, error) in
        guard let documents = querySnapshot else {return }
        self.specialities = documents.documents.compactMap { (doc) -> Spty? in
          let id = doc.documentID
            if  let spty = doc.get("spty") as? String,
            let r = doc.get("r") as?  NSNumber,
            let g = doc.get("g") as?  NSNumber,
            let b = doc.get("b") as?  NSNumber{
            
            return Spty(id: id, spty: spty, r: r , g: g , b: b )
            }
            else{
                return nil
            }
        }
      }
    }

   }

看到這個視頻后,我開始對我的代碼進行更改。 但是,當我添加Codable ,我得到了這些錯誤

類型“Spty”不符合協議“Decodable”

類型“Spty”不符合協議“Encodable”

圖片

正如您在此處看到的“使類型可編碼的最簡單方法是使用已經可編碼的類型聲明其屬性。這些類型包括標准庫類型,如 String、Int 和 Double;以及基礎類型,如 Date、Data 和 URL . 任何屬性可編碼的類型只要聲明符合性就自動符合 Codable。” 這意味着如果要使用可編碼,則必須使用:

  1. 內置可編碼類型— String、Int、Double、Data、URL Array、

  2. Dictionary, Optional如果它們包含 Codable 類型,則它們是 Codable

由於 NSNumber 不是 Codable 類型的一部分,因此您無法使用它。 鏈接與您的問題類似,您可以在那里看到相同的解釋。

代替 NSNumber 使用本機 Swift 類型,如 Double,並將其他代碼與該類型對齊

struct Spty: Identifiable, Codable{
   @DocumentID var id: String? = UUID().uuidString
   var spty: String
   var r: Double
   var g: Double
   var b: Double
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM