是否可以避免在Swift编写的DSL代码中使用闭包参数$ 0?

时间:2019-04-24 09:10:51

标签: swift parameters closures dsl

我见过的所有在Swift中定义DSL的博客帖子都使用结尾闭包,并使用闭包参数$ 0。这使代码变得冗长,而且我觉得很丑。 (例如:https://mecid.github.io/2019/01/30/creating-dsl-in-swift

有没有办法避免这样的代码?
到处都是$ 0。

let rootView = stack {
    $0.spacing = 16
    $0.axis = .vertical
    $0.isLayoutMarginsRelativeArrangement = true

    $0.label {
        $0.textAlignment = .center
        $0.textColor = .white
        $0.text = "Hello"
    }
}

科特琳通过“带有接收器的扩展功能”来避免这种情况(请参阅:What does a Kotlin function signature with T.() mean?)。

Swift中有类似的东西吗?还是计划好的?

1 个答案:

答案 0 :(得分:0)

这是driver.findElement(By.xpath("//input[@class='Searchbar__search-field___2FQ0S search-input']") 中的closure(匿名函数),它有助于将函数设置为变量。

尝试一下:

Swift

对于功能:

   let rootView = stack(apply: newFunction(_:))

....

 func newFunction(_ obj : UIStackView) {
        obj.spacing = 16
        obj.axis = .vertical
        obj.isLayoutMarginsRelativeArrangement = true
 }