【发布时间】:2020-05-15 16:34:15
【问题描述】:
我有一个包含不同类型消息的数组:
let chatMessagesArray = [
TextMessage(direction: "Incoming", timestamp: 1589463871, senderID: "Bob", destinationID: "Sally", message: "I was sent this message", deliveryStatus: "Delivered", deliveryTimestamp: 1589463871),
TextMessage(direction: "Outbound", timestamp: 1589467569, senderID: "Sally", destinationID: "Bob", message: "I sent this message", deliveryStatus: "Delivered", deliveryTimestamp: 1589467622),
ImageMessage(direction: "Incoming", timestamp: 1589485467, senderID: "Bob", destinationID: "Sally", imageURL: "http://Image.Full.URL", thumbnailURL: "https://thumbnail.image.url", deliveryStatus: "Delivered", deliveryTimestamp:1589485467),
] as [Any] <-- Is Any the best choice?
每种类型的消息都有自己的视图:
struct TextMessageView: View {
var currentMessage: TextMessage
var body: some View {
HStack(alignment: .bottom, spacing: 15, content: {
if(currentMessage.direction == "Incoming"){
Text(currentMessage.message)
.padding()
.background(Color.init(red: 0.8, green: 0.8, blue: 0.8))
//.background(Color.gray)
.cornerRadius(30)
} else {
Text(currentMessage.message)
.foregroundColor(Color.white)
.padding()
.background(Color.green)
.cornerRadius(30)
}
})
}
}
在我的列表视图中,我希望能够根据消息类型调用正确的视图TextMessage || ImageMessage || ...
List{
ForEach(chatMessagesArray){chatMessageRow in
if(chatMessageRow === TextMessage){ <-- What do I put here?
TextMessageView(currentMessage: chatMessageRow)
} else if(chatMessageRow === ImageMessage){
ImageMessageView(currentMessage: chatMessageRow)
}
}
阅读消息类型和呈现正确视图的最佳方式是什么? 有没有更好的方法来存储和检索数据? 谢谢
【问题讨论】: