[英]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.self
, username
屬性的類型將不是String
,而是String.Type
。 基本上,它保存的不是字符串,而是類型。 類型本身不可編碼或可解碼,因此整個結構不能隱式編碼。
如果您希望username
、 email
和status
包含字符串而不是類型,但不希望它們具有空字符串的默認值(如id
或pushId
),只需按如下方式聲明它們: var username: String
。
這將使 Swift 編譯器能夠為您綜合Codable
一致性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.