假设我正在设置一个UIStackView
的属性。我将这样做:
let stackView = UIStackView()
stackView.distribution = .fill
stackView.alignment = .fill
stackView.axis = .vertical
stackView.spacing = 12
每次我写stackView
,腕管综合征的影响都会加重。我可以做一个包含这些属性的扩展,但这对很多视图来说很难做到,你不能把所有属性都放到某个扩展中,这很糟糕。我已经看到了类似的东西,我会把下面的一些其他语言,我想知道如果我们心爱的Swift提供任何。我找了,但什么也没找到。任何想法吗?:
let stackView = UIStackView() {
distribution = .fill
alignment = .fill
axis = .vertical
spacing = 12
}
p。S:我可以这样做(当然也可以让它通用),但是额外的0美元还是让我很烦。
extension UIStackView {
convenience init(quickSetProperties: (UIStackView) -> Void) {
quickSetProperties(self)
}
}
let stackView = UIStackView() {
$0.distribution = .fill
$0.distribution = .fill
$0.alignment = .fill
$0.axis = .vertical
$0.spacing = 12
}
可惜Swift闭包不支持这一点。在您的情况下,您必须使用$0
或在闭包中显式定义变量{ stackView in ... }
来修改底层视图。
Tomas已经说过Swift闭包不支持
另一种方法是使用默认值的类方法,例如extension UIStackView {
static func createCustom(distribution : UIStackView.Distribution = .fill,
alignment : UIStackView.Alignment = .fill,
axis : NSLayoutConstraint.Axis = .vertical,
spacing : CGFloat = 12.0) -> UIStackView {
let stackView = UIStackView()
stackView.distribution = distribution
stackView.alignment = alignment
stackView.axis = axis
stackView.spacing = spacing
return stackView
}
}
所以要用默认值创建一个新的stackview,但是使用不同的axis
,只需写入
let s = UIStackView.createCustom(axis: .horizontal)