2017-01-20 4 views
1

클래스 Slider가 있습니다. 어떤 슬라이드 광고 배열 [광고]. 이제는 slideForFood를 만들었습니다. slideForFood는 음식 배열 [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

가능한 중복

IMO, 당신은이 같은 프로토콜을 작성해야합니다 : //stackoverflow.com/questions/28786597/overriding-properties-in-swift). 게다가, '음식'이 '광고'라면, 아마도 상속받을 수도 있습니다. – shallowThought

답변

1

상속이란 기본적으로 "일종의 종류"를 의미합니다. "Slider for food 은 일종의 광고용 슬라이더"로 나에게 의미가 없습니다. 당신이 개 슬라이더 클래스가 준수 그런

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

은 당신이 : (HTTP를 [신속의 속성을 재정의]의

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

답변을 주셔서 감사합니다, 나는 단지 associatedtype의 사용을 이해 ... –

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 
} 

그래도 문제가 해결되지 않으면 알려주세요.