我需要添加什么才能使用 AuthenticatedUserModel 擴展 UserModel 而不會出現此錯誤?
// 'required' initializer 'init(from:)' must be provided by subclass of 'UserModel'
我知道我也可以將 accessToken 作為可選添加到 UserModel 中,但我想了解發生了什么,以便更好地理解 swift?
class UserModel: Codable, Identifiable, ObservableObject {
let id: Int
let firstName: String?
let lastName: String?
let username: String?
let bio: String?
let theme: String?
let imageSrc: String?
let interests: [String]?
let followerCount: Int?
let following: Bool?
let followingCount: Int?
let hasCompletedRegistration: Bool?
let isPrivate: Bool?
let readerMode: Bool?
let isActive: Bool?
let isVerified: Bool?
let isSuspended: Bool?
let isAdmin: Bool?
let isFollowing: Bool?
let createdAt: String?
let updatedAt: String?
init(id: Int, firstName: String, lastName: String, bio: String) {
self.id = id
self.firstName = firstName
self.lastName = lastName
self.username = ""
self.bio = ""
self.theme = ""
self.imageSrc = ""
self.interests = [""]
self.followerCount = 0
self.following = false
self.followingCount = 0
self.hasCompletedRegistration = true
self.isPrivate = false
self.readerMode = true
self.isActive = true
self.isVerified = false
self.isSuspended = false
self.isAdmin = false
self.isFollowing = false
self.createdAt = ""
self.updatedAt = ""
}
var name: String {
return "\(firstName ?? "") \(lastName ?? "")"
}
}
class AuthenticatedUserModel: UserModel {
let accessToken: String?
override init(id: Int, firstName: String, lastName: String, bio: String) {
self.accessToken = nil
super.init(id: id, firstName: firstName, lastName: lastName, bio: bio)
}
}
uj5u.com熱心網友回復:
Decodable 協議需要實作該方法init(from:)。添加新屬性的原因是init(from:)父類的自動創建的方法沒有被繼承。發生這種情況是因為繼承的方法無法從子類初始化新屬性。
因此解決方案是添加所需的方法。例如像這樣(未經測驗的代碼)
required init(from decoder: Decoder) throws {
accessToken = try decoder.singleValueContainer().decode(String.self)
try super.init(from: decoder)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/416015.html
標籤:
