В настоящее время я застрял в ситуации, когда мне нужно создать модель данных, которая будет использоваться в UITableView для добавления постов и их извлечения (читай: показывать их в ленте). Позвольте мне объяснить:
Я хочу создать стандартную модель данных для поста, которая содержит заголовок, тело и теги. Я использую структуру для этого.
struct Post {
var Title: String
var Body: String
var Tags: [String]
}
Это прекрасно работает. Я могу повторно использовать это для создания нескольких сообщений одновременно в UITableView
, что именно то, что я хочу. Однако проблема возникает сейчас, когда я хочу улучшить свою систему. Я хочу, чтобы пользователи могли добавлять вложения, будь то изображения или видео (давайте оставим это в этих двух для этого примера и оставим текстовые документы, pdfs, ...). Моя UITableView
настроена таким образом, что каждый раздел - это сообщение, а каждая строка - это элемент этого сообщения. Заголовок определяется в UITextField
в заголовке раздела, а теги - в нижнем колонтитуле раздела. Тело это ряд. Теперь я хочу разрешить пользователям добавлять строки, чтобы добавлять все, что они хотят: простой текст (строка «тело»), а также изображения (и) или видео (ы). Я создам три кнопки: Добавить текст, Добавить изображение и Добавить видео.
Как я могу улучшить свою модель данных, чтобы она могла хранить всю эту информацию? Должен ли я, например, добавить одну переменную «Вложения» для всех типов (изображение и видео) или создать отдельные необязательные переменные, например:
struct Post {
var postTitle: String
var postBody: String
var postTags: [String]
var postImages: [AttachmentImage]
var postVideos: [AttachmentVideo]
}
struct AttachmentImage {
var imageTitle: String
var imageReference: String
var imageSize: Int
}
struct AttachmentVideo {
var videoTitle: String
var videoReference: String
var videoSize: Int
var videoThumbnail: String
}
Это кажется возможным, но я хотел бы добиться определенного способа, чтобы я мог изменять переменные на основе другой переменной. В идеале у меня было бы что-то вроде:
enum PostTypes {
case Text, Image, Video
}
struct Post {
var postTitle: String
var postBody: String
var postTags: [String]
var postType: PostTypes
}
И затем, если типом является Текст, я хочу сохранить его как есть, но если типом является Изображение, я хочу добавить imageTitle, imageReference и imageSize, и то же самое для Видео. Есть ли способ достичь этого, или я должен пойти с дополнительными?