Литералы объектов JavaScript и Литералы массивов

Я решил написать свой собственный UIView для решения проблемы. Я сомневаюсь, что это очень надежно, но это решает мои насущные потребности. Пожалуйста, прокомментируйте, если у вас есть предложения по улучшению.

import UIKit

class FlowLayout: UIView {
private var hgapValue: CGFloat = 0.0
private var vgapValue: CGFloat = 0.0

var hgap: CGFloat {
    set(newValue) {
        hgapValue = (newValue < 0) ? -newValue : newValue
    }
    get {
        return hgapValue
    }
}

var vgap: CGFloat {
    set(newValue) {
        vgapValue = (newValue < 0) ? -newValue : newValue
    }
    get {
        return vgapValue
    }
}

//initWithFrame to init view from code
override init(frame: CGRect) {
    super.init(frame: frame)
    setupView()
}

//initWithCode to init view from xib or storyboard
required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setupView()
}

override func didAddSubview(_ subview: UIView) {
    refreshLayout()
}

//common func to init our view
private func setupView() {
    // backgroundColor = .red
}

public func refreshLayout() {
    var x: CGFloat = 0.0
    var y: CGFloat = 0.0

    for subview in subviews {
        subview.frame.origin.x = x
        subview.frame.origin.y = y
        x += subview.frame.width + hgapValue
        if x + subview.frame.width >= (subview.superview?.frame.width)! {
            x = 0.0
            y += subview.frame.height + vgapValue
        }

    }
    setNeedsDisplay()
}

}
12
задан lYriCAlsSH 1 February 2009 в 11:01
поделиться

3 ответа

Mozilla.org имеет очень хорошее объяснение различных литералов с примерами.

Литералы массивов

Литерал массивов является списком нуля или большего количества выражений, каждое из которых представляет элемент массива, включенный в квадратные скобки ([]). При создании массива с помощью литерала массивов он инициализируется с заданными значениями как его элементы, и его длина установлена на количество указанных аргументов.

Литералы объектов

Литерал объектов является списком нуля или большим количеством пар имен свойства и присваиваемых значений объекта, включенного в фигурные скобки ({}). Вы не должны использовать литерал объектов в начале оператора. Это будет приводить к ошибке или не вести себя, как Вы ожидаете, потому что {будет интерпретироваться как начало блока.

15
ответ дан 2 December 2019 в 18:22
поделиться

Различием является способ, которым они индексируются.
Объекты имеют имя, оценивают пар, которые не заказаны. В некоторых браузерах порядок Вы добавленные стоимости будут порядком, который Вы получаете, когда Вы пересекаете объект, но не всего. Имя обычно является строкой.
Массивы численно индексируются, и порядок полностью надежен

3
ответ дан 2 December 2019 в 18:22
поделиться

Литерал объекта

var a = {};

Литерал массива

var a = [];

Вот и все!

2
ответ дан 2 December 2019 в 18:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: