2017-01-20 2 views
1

私はクラスSliderを持っています。どの広告のスライド配列[広告]。今度は、スライダー・フードを作成しました。スライダー・フードは、食品配列[Food]をスライドさせる必要がありますどのようにして広告[広告] varを食品[食品] varに置き換えることができますか?アイテムのプロトコルを作成し、このすなわち広告や食品の2つの実装を作成し(そして、あなたは将来的にはさらに多くを必要とするかもしれない) -子クラスの配列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)。これに加えて、もし 'Food'が' Advertisement'ならば、それは継承するかもしれない。 – shallowThought

答えて

1

基本的に継承とは、「一種」です。あなたは、 "Slider for food は、広告のためのスライダースライダーです"と言っていますが、それは私には意味がありません。

IMO、あなたがこのようなプロトコル作成する必要があります。

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

その後、あなたは2つのスライダークラスがそれに準拠してい:

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

あなたはより良い方法、次のことを行う必要があります。スライダの機能は、アイテムオブジェクトの実装に基づいて変更できます。これを行うには、プロトコルにメソッドとプロパティを追加します。

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 
} 

これで問題が解決しない場合は教えてください。

関連する問題