Если вы создаете инициализатор, вам нужно указать значение для всех сохраненных свойств в инициализаторе, вы не можете использовать значения ваших свойств по умолчанию. Поэтому, даже если вы объявите свои свойства как Optional
, вам нужно присвоить им значение nil
в инициализаторе, если вы хотите, чтобы они были nil
.
Не имеет отношения к вашей проблеме, но нет необходимости объявлять CodingKeys
, если все ваши имена свойств совпадают с вашими ключами JSON, а также нет необходимости вручную писать инициализатор init(from:)
, компилятор может автоматически синтезировать это для вас в твой простой случай. Тем не менее, вы должны соответствовать соглашению об именах Swift, которое является lowerCamelCase для имен переменных (включая enum
падежи), поэтому переименуйте ваши свойства соответствующим образом, и тогда вам потребуется CodingKeys
.
Помните, что многие из ваших типов на самом деле не имеют смысла. Почему переменные называются count
String
s? Если они идут как String
s из бэкэнда, преобразуйте их в Int
s в init(from:)
. Кроме того, в вашем init(doctor:)
имеет смысл добавить doctor
к вашему массиву doctors
.
struct Conversation : Codable {
let chatId: String?
let id: String?
let name: String?
let profilePic: String?
let lastMessageFrom: String?
let message: String?
let time: String?
let unreadCount: String?
let memberCount: String?
var type: ChatType = .single
var doctors:[Doctors]?
enum CodingKeys: String, CodingKey {
case chatId = "chat_id"
case id
case name
case profilePic = "profile_pic"
case lastMessageFrom = "last_message_from"
case message
case time
case unreadCount = "unread_count"
case memberCount = "member_count"
case doctors
}
init(doctor:Doctors) {
self.id = doctor.doctorId
self.profilePic = doctor.doctorPic
self.type = .single
self.chatId = nil
self.name = nil
self.lastMessageFrom = nil
self.message = nil
self.time = nil
self.unreadCount = nil
self.memberCount = nil
self.doctors = [doctor]
}
}