【发布时间】:2020-10-08 19:51:30
【问题描述】:
谁能告诉我我的方法有什么问题?错误是
- 类型“用户”不符合协议“可解码”
- 类型“用户”不符合协议“可编码”
我尝试用 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 } }
【问题讨论】:
-
检查 Encodable 和 Decodable 的文档以获取所需的方法而不是需要实现的方法。
-
属性 id、pushId 和 avatarLink 都是字符串,它们本身是可编码的,但用户名、电子邮件和状态是 String.type(不是字符串)并且不可编码。