首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >设置具有较少半样板的UIView (或对象)的多个属性- Swift

设置具有较少半样板的UIView (或对象)的多个属性- Swift
EN

Stack Overflow用户
提问于 2021-02-14 11:01:35
回答 2查看 40关注 0票数 0

假设我正在设置UIStackView的属性。我会这样做:

代码语言:javascript
运行
复制
let stackView = UIStackView()
stackView.distribution = .fill
stackView.alignment = .fill
stackView.axis = .vertical
stackView.spacing = 12

每次写stackView时,我的腕管综合症的影响都会恶化。我可以做一个使用这些属性的扩展,但是对于很多视图来说,这是很难做到的,而且您不能将所有的属性都放在某个扩展中,这很糟糕。我已经看到了这样的事情,我将在下面一些其他语言,我想知道我们亲爱的斯威夫特是否提供了什么。我搜索了但什么也没找到。有什么想法吗?

代码语言:javascript
运行
复制
let stackView = UIStackView() {
    distribution = .fill
    alignment = .fill
    axis = .vertical
    spacing = 12
 }

P.S:我可以这样做(当然也可以让它成为通用的),但是额外的0美元仍然困扰着我。

代码语言:javascript
运行
复制
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
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-14 11:13:39

不幸的是,Swift闭包不支持这一点。在您的示例中,您必须使用$0或在闭包中显式定义变量{ stackView in ... }来修改基础视图。

票数 2
EN

Stack Overflow用户

发布于 2021-02-14 11:33:48

正如Tomas已经说过的,Swift闭包不支持这一点。

另一种方法是具有默认值的类方法,例如

代码语言:javascript
运行
复制
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的新堆栈视图,只需编写

代码语言:javascript
运行
复制
let s = UIStackView.createCustom(axis: .horizontal)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66194724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档