2017-01-20 2 views
1

У меня есть класс Slider. Какой слайд массив рекламных объявлений [Реклама]. Теперь я создал слайдер ForFood, который должен перемещать массив продуктов [Food]. Как я могу переопределить свою рекламу [Реклама] var с продуктами [FOOD] var.Как переопределить массив 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 
      } 
    } 
} 
} 
+0

Возможный дубликат [Переопределение свойства в стрижа] (HTTP: //stackoverflow.com/questions/28786597/overriding-properties-in-swift). Кроме того, если «Продовольствие» - это «Реклама», возможно, он также может наследовать. – shallowThought

ответ

1

Наследование в основном означает «это своего рода». Вы говорите, что «Слайдер для еды - это своего рода слайдер для рекламы», который для меня не имеет смысла.

ИМО, вы должны создать протокол, как это:

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]() 
} 
+0

Они такие же, кроме типа массива! Вот почему я решил создать ребенка! –

+0

@YestayMuratov Даже если они точно такие же, кроме типа массива, 'SliderForFood' не должен наследоваться от' SlideADV'. – Sweeper

+0

спасибо за ответ, я просто понял использование связанного типа ... –

1

Вы должны лучше сделать это следующим образом - создать протокол Item и создать две реализации этой рекламы и то есть продуктов питания (и вы, возможно, потребуется гораздо больше в будущем). Функциональность ползунка может изменяться в зависимости от реализации объекта 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 
} 

Дайте мне знать, если это не поможет решить вашу проблему.

Смежные вопросы