如何在子类中重写数组var?

时间:2017-01-20 06:19:23

标签: swift class swift3 override

我有类滑块。哪个幻灯片广告[广告]。现在我创建了sliderForFood,它必须滑动食物阵列[食物]。如何覆盖我的广告[广告] var with foods [FOOD] var。

class SliderADV {
    var arrayAdvertisements: [Advertisement] = [Advertisement]()
}

class SliderForFood: SliderADV {
    var arrayFood:[Food] = [Food]()

     override var arrayAdvertisements: [Advertisement]{
        get {
           return arrayFood
           }
       set{
           if newValue is [ArrayFood]{
               self.arrayAdvertisement = newValue
          }
     }
}
}

2 个答案:

答案 0 :(得分:1)

您最好按照以下方式进行操作 - 创建一个Item协议并创建两个实现,即广告和食物(将来可能还需要更多)。您的滑块功能可以根据项目对象的实现进行更改,您可以通过在协议中添加方法和属性来实现。

protocol Item {
 var name : String {get set}
 func showDetail()
}

class Advertisement : Item {
   var name : String!
   init(with name: String) {
      self.name = name
   }

    func showDetail() {

    }
}

class Food : Item {
   var name : String!
   init(with name: String) {
      self.name = name
   }

     func showDetail() {

     }
}

class Slider {
   var items: [Item]!  // any object which implements Item protocol
}

如果这不能解决您的问题,请告诉我。

答案 1 :(得分:1)

继承基本上意味着“是一种”。你说的是“Slider for food 是一种广告的滑块”,这对我来说没有意义。

IMO,您应该创建一个这样的协议:

protocol Slider {
    associatedtype ThingToSlide
    var things: [ThingToSlide] { get set }
}

然后你有两个滑块类符合它:

class SliderForAds : Slider {
    typealias ThingToSlide = Advertisment
    var things: [Advertisment] = [Advertisment]()
}

class SliderForFood : Slider {
    typealias ThingToSlide = Food
    var things: [Food] = [Food]()
}