Установка значений класса, например, UIButton - PullRequest
0 голосов
/ 06 июня 2018

Мне не хватает некоторых базовых представлений.

Сегодня я хотел создать подкласс некоторого UIView, и я посмотрел на определение UIButton, но я не могу понять, как оно работает.

ВОпределение UIButton - это такие свойства, как:

open var adjustsImageWhenHighlighted: Bool 

open var adjustsImageWhenDisabled: Bool 

Когда используется UIButton, не имеет значения, когда устанавливаются значения UIButton, он всегда настраивается правильно, как и в tableView или любых других классах UIKit.

Я сделал пример:

class customView: UIView {
        var shouldSetupConstraints = true
        var addAdditionalSpacing = true

        var elements: [String]? {
            didSet{
                if addAdditionalSpacing == false {
                    doSomething()
                }
            }
        }
        func doSomething() {
        }

        override init(frame: CGRect) {
            super.init(frame: frame)
            setUpLayout()
        }

        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
        }

        override func updateConstraints() {
            if(shouldSetupConstraints) {
                // AutoLayout constraints
                shouldSetupConstraints = false
            }
            super.updateConstraints()
        }

        func setUpLayout() {

        }
    }

Использование CustomView:

lazy var customV: CustomView = {
    let v = CustomView()
    v.addAdditionalSpacing = true
    v.elements = ["One","Two"]
    return v
}()

lazy var customV2: CustomView = {
    let v = CustomView()
    v.elements = ["One","Two"]
    v.addAdditionalSpacing = true
    return v
}()

Так что, если я использую CustomView, то имеет значение, в каком порядке я его настроил, я понимаюпочему, но я не понимаю, каким образом я должен проектировать свои классы, чтобы я мог устанавливать значения в любое время, кроме как с другими конфигурациями didSet.Почему свойства в UIButton не имеют никаких установщиков, как значения устанавливаются в этом случае?

Любые ссылки на документацию также приветствуются.

1 Ответ

0 голосов
/ 06 июня 2018

Прежде всего, в UIButton вы можете взять под контроль наблюдатель свойства didSet для существующих свойств, например:

override var adjustsImageWhenDisabled: Bool {
    didSet {
        doStuff()
    }
}

Во-вторых, в вашем сценарии класса вы можете рассмотреть возможность передачи параметров в конструкторе:

init(shouldSetupConstraints: Bool = true, var addAdditionalSpacing = true)

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

Дайте мне знать, если это поможет.

...