Подклассы Swift имеют сложный подтип

#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]?
}