Как установить пользовательские свойства UIView - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь создать подкласс управления звездным рейтингом. У меня есть необязательная переменная в классе контроля рейтинга, которая называется rating, которую я хочу изменить после создания представления, но по какой-то причине она всегда равна нулю.

Как у меня есть свойства в классе StarRatingView, которые я могу изменить, как в примере ниже?

class StarRatingView: UIStackView {

    var rating: Int?

    override init(frame: CGRect) {
        super.init(frame: frame)
        print(rating) // <<<---- Prints "nil" -----
        addStarsBasedOnRating()
    }

    required init(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }


    // How I'd like to access rating <<<<-------
    func addStarsBasedOnRating() {
        if rating == someNumber {
            // do something    
        }
    }

}

Так создается класс управления в классе, который его инициализирует.

let ratingView: StarRatingView = {
    let view = StarRatingView()
    view.rating = 4
    return view
}()

1 Ответ

2 голосов
/ 17 апреля 2019

Вы пытаетесь напечатать значение до того, как оно будет установлено.Попробуйте это:

class StarRatingView: UIStackView {

    var rating: Int? {
        didSet {
            addStarsBasedOnRating()
        }
    }

    func addStarsBasedOnRating() {
        // make sure rating is not nil
        guard let rating = rating else {
            // maybe you want to reset the view in here
            return
        }

        if rating == someNumber {
            // do something
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...