let stackView = VStackView {
UserProfileView(imageURL)
UserNameView(name)
}
UIStackViewを便利に使うために、ViewBuilderを作って初期化できるようにしてみます。
import UIKit
@resultBuilder
public struct ArrangedSubviewBuilder {
public static func buildBlock(_ components: UIView...) -> [UIView] {
components
}
}
public class HStackView: UIStackView {
public convenience init(
spacing: CGFloat = UIStackView.spacingUseSystem,
@ArrangedSubviewBuilder arrangedSubviews: () -> [UIView]
) {
self.init(frame: .null)
self.spacing = spacing
self.axis = .horizontal
for view in arrangedSubviews() {
addArrangedSubview(view)
}
}
}
public class VStackView: UIStackView {
public convenience init(
spacing: CGFloat = UIStackView.spacingUseSystem,
@ArrangedSubviewBuilder arrangedSubviews: () -> [UIView]
) {
self.init(frame: .null)
self.spacing = spacing
self.axis = .vertical
for view in arrangedSubviews() {
addArrangedSubview(view)
}
}
}