Как я могу получить доступ к свойствам из моих подклассов? - PullRequest
0 голосов
/ 03 января 2019

У меня проблема с доступом к свойствам из моих подклассов. Я определил суперкласс, а затем создал подклассы, унаследованные от суперкласса. Я инициализировал мой суперкласс внутри своих подклассов.

У меня есть класс под названием Box. Внутри этого класса у меня есть свойство с именем Offer, которое имеет тип OfferType.

var Предложение: OfferType?

Чем я создал класс OfferType и установил некоторые свойства внутри него.

class OfferType {

    var Name: String?
    var Image: UIImage?
    var Description: String?

    init(Name: String, Image: UIImage, Description: String) {
        self.Name = Name
        self.Image = Image
        self.Description = Description   
    }
}

Чем я создал 3 подкласса OfferType

class Discount: OfferType {

    var Quantity: Int?

    init() {
        super.init(Name: "Discount", Image: UIImage(named: "Discount")!, Description: "nice")
    }   
}

class FreeShipping: OfferType  {

    var From: String?
    var To: String?

    init() {
        super.init(Name: "FreeShiping", Image: UIImage(named: "FreeShipping")!, Description: "lalaa")
    }   
}

class BoGoF: OfferType {

    lazy var SecondProduct = String()

    init() {
        super.init(Name: "BoGoF", Image: UIImage(named: "BoGoF")!, Description: "boh")
    }    
}

Теперь я пытаюсь получить свойство подкласса после Назначить подкласс как свойство Offer внутри класса BOX.

Я не могу этого сделать, единственные опции, которые мне дает XCode, - это доступ к свойствам суперкласса (OfferType)

Мне нужно получить доступ к свойству Количество подкласса Скидка.

Здесь я пытаюсь получить доступ к свойствам

Сначала я назначаю подкласс свойству в классе Box

newBox.Offer = Скидка

Теперь я пытаюсь получить свойства Discount, а мне это не дает

newBox.Offer. Just Here

Я пытался разыграть его, но это не сработало

enter image description here

Мой класс newbox определен так

enter image description here

Вот так определяется класс Box

Class Box

1 Ответ

0 голосов
/ 03 января 2019

Ваш экземпляр newBox, вероятно, имеет свойство offer, определенное как OfferType.

Даже если вы поместите экземпляр Discount в свойство offer, компилятор не сможетзнайте, что поскольку все, что вы сказали компилятору, это то, что offer будет содержать OfferType.У него нет никакого способа узнать, что специфично OfferType, которое будет там содержаться.

Вы должны привести offer к типу, который вы ожидаете.Я предлагаю вам взглянуть на as и is.Вот пример:

if let discount = newBox.offer as? Discount {
   print("Discount Quantity is \(discount.quantity)")
}

Здесь ключевое слово as? в основном говорит компилятору следующее:

равно newBox.offer своего рода Discount?Если это так, верните это, иначе верните ноль.

...