簡體   English   中英

不符合 Decodabel 和 Encodable 協議

[英]Does not conform to protocol Decodabel and Encodable

有人可以告訴我我的方法有什么問題嗎? 錯誤是

  • “用戶”類型不符合“可解碼”協議
  • “用戶”類型不符合“可編碼”協議

我試圖用 String.self 替換 Var id、pushId 和 avatarLink 的空字符串,但也無濟於事。

請幫忙

struct User: Codable, Equatable{ var id = "" var username = String.self var email = String.self var pushId = "" var avatarLink = "" var status = String.self static var currentId: String { return Auth.auth().currentUser!.uid } static var currentUser: User? { if Auth.auth().currentUser != nil { if let dicctionary = UserDefaults.standard.data(forKey: kCURRENTUSER) { let decoder = JSONDecoder() do { let userObject = try decoder.decode(User.self, from: dicctionary) return userObject } catch { print("Error decoding user from user defaults ", error.localizedDescription) } } } return nil } static func == (lhs: User, rhs: User) -> Bool { lhs.id == rhs.id } }

當您編寫var username = String.selfusername屬性的類型將不是String ,而是String.Type 基本上,它保存的不是字符串,而是類型。 類型本身不可編碼或可解碼,因此整個結構不能隱式編碼。

如果您希望usernameemailstatus包含字符串而不是類型,但不希望它們具有空字符串的默認值(如idpushId ),只需按如下方式聲明它們: var username: String

這將使 Swift 編譯器能夠為您綜合Codable一致性。

暫無
暫無

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

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