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

}

如何在Swift中完全实现PictureItem的子项而不创建新的子类型枚举?

解决方法

您可以通过引入只有TextItemPictureItem符合的新协议来做到这一点:

protocol PictureOverlayable: VisualItem {}

class TextItem: VisualItem,PictureOverlayable {}

class PictureItem: VisualItem,PictureOverlayable {
   private var subItems: [PictureOverlayable]?
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...