#ios #swift #inheritance #enums #unions
#iOS #swift #наследование #перечисления #объединения
Вопрос:
У меня есть эта проблема с дизайном в Swift. Вот мой корневой класс и его подклассы:
enum VisualItemType {
case video, picture, text,...
}
class VisualItem {
public var itemType: VisualItemType
...
}
class PictureItem:VisualItem {
private var subItems:[PictureItem OR TextItem But NOT VideoItem]? //Overlay of picture can be picture or text but not video
}
class VideoItem: VisualItem {
private var subItems:[VisualItem]? //Overlay of video can be any type of visual item
}
Как мне чисто реализовать подпункты PictureItem в Swift без создания нового перечисления подтипов?
Ответ №1:
Вы можете сделать это, введя новый протокол, который TextItem
PictureItem
будет соответствовать только и:
protocol PictureOverlayable: VisualItem {}
class TextItem: VisualItem, PictureOverlayable {}
class PictureItem: VisualItem, PictureOverlayable {
private var subItems: [PictureOverlayable]?
}