У меня есть тело ответа json, которое выглядит следующим образом.В целях моего пользовательского интерфейса сообщение верхнего уровня - это только первое сообщение в списке.
{
"messageId": "1234-1234-1234",
"jobId": "1234-1234-1234",
"message": "This is the top level message",
"createdDate": "2019-03-18T14:55:21.467",
"user": {},
"messages": [{
"messageId": "1234-1234-1234",
"jobId": "1234-1234-1234",
"message": "This is the a child message",
"createdDate": "2019-03-18T14:55:21.467",
"user": {},
"messages": [],
"attachments": []
},
{
"messageId": "1234-1234-1234",
"jobId": "1234-1234-1234",
"message": "This is the another child message",
"createdDate": "2019-03-18T14:55:21.467",
"user": {},
"messages": [],
"attachments": []
},
{
"messageId": "1234-1234-1234",
"jobId": "1234-1234-1234",
"message": "This is the yet another child message",
"createdDate": "2019-03-18T14:55:21.467",
"user": {},
"messages": [],
"attachments": []
}
],
"attachments": []
}
Субъект сервера
struct MessageServer: Codable {
let messageId: String
let jobId: String
let message: String
let createdDate: Date
let user: User
let messages: [MessageServer]
let attachments: [FileServer]
init(messageId: String,
jobId: String,
message: String,
createdDate: Date,
user: User,
messages: [MessageServer],
attachments: [FileServer]
) {
self.messageId = messageId
self.jobId = jobId
self.message = message
self.createdDate = createdDate
self.user = user
self.messages = messages
self.attachments = attachments
}
}
Субъект приложения
struct Message: Codable {
let message: String
let createdDate: Date
let displayName: String
let isMine: Bool
let attachments: [File]
init(message: String, createdDate: Date, displayName: String, isMine: Bool, attachments: [File]) {
self.message = message
self.createdDate = createdDate
self.displayName = displayName
self.isMine = isMine
self.attachments = attachments
}
}
В моем сервисном звонке яхотел бы просто вернуть наблюдаемый массив сообщений.
func getMessages(sectionID id: String) -> Observable<[Message]> {
return messageServiceEndpoints
.getMessages(for: id)
.map({
$0.map({
Message( /* init message here */ )
})
})
}
Есть ли способ уменьшить или отобразить это до одного массива?