假设我正在设置UIStackView的属性。我会这样做:
let stackView = UIStackView()
stackView.distribution = .fill
stackView.alignment = .fill
stackView.axis = .vertical
stackView.spacing = 12每次写stackView时,我的腕管综合症的影响都会恶化。我可以做一个使用这些属性的扩展,但是对于很多视图来说,这是很难做到的,而且您不能将所有的属性都放在某个扩展中,这很糟糕。我已经看到了这样的事情,我将在下面一些其他语言,我想知道我们亲爱的斯威夫特是否提供了什么。我搜索了但什么也没找到。有什么想法吗?
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
}发布于 2021-02-14 11:13:39
不幸的是,Swift闭包不支持这一点。在您的示例中,您必须使用$0或在闭包中显式定义变量{ stackView in ... }来修改基础视图。
发布于 2021-02-14 11:33:48
正如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
}
}因此,要创建一个具有默认值但使用不同axis的新堆栈视图,只需编写
let s = UIStackView.createCustom(axis: .horizontal)https://stackoverflow.com/questions/66194724
复制相似问题