【问题标题】:Swift subclasses complex subtypeSwift 子类复杂子类型
【发布时间】:2020-09-24 09:56:57
【问题描述】:

我在 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 的子项而不创建新的子类型枚举?

【问题讨论】:

    标签: ios swift inheritance enums unions


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多