Swift 中的构建器模式设置方法

amo*_*the 3 builder ios swift

我刚刚从 Android 基础转移到 ios,在 swift 中寻找构建器模式 get 和 set 方法,但找不到类似的东西。仅发现以下内容

var ptype : String? {
    get{
        return self.ptype
    }set (ptype) {
        self.ptype = ptype
    }
}
Run Code Online (Sandbox Code Playgroud)

Swe*_*per 5

在使用了这么多用 Swift 编写的库之后,我很少看到人们在 Swift 中使用构建器模式。

我认为 Builder 模式的主要优点已经可以通过 Swift 的其他语言功能来实现。您完全可以创建一个所有参数都是可选的构造函数,并且您几乎只是在 Swift 中重新创建了构建器模式:

class Foo {
    let a: Int
    let b: String
    let c: Bool

    init(a: Int = 0, b: String = "", c: Bool = false) {
        self.a = a
        self.b = b
        self.c = c
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以创建Foo这样的:

// You can omit any of the arguments, just like the builder pattern
Foo(
    a: 123
    b: "Hello World"
    c: true
)
Run Code Online (Sandbox Code Playgroud)

我认为这是 Java 中类似的更简洁的版本:

new FooBuilder()
    .setA(123)
    .setB("Hello World")
    .setC(true)
    .build()
Run Code Online (Sandbox Code Playgroud)

但如果你坚持的话,这里有一些非常冗长的 Swift 实现了 Builder 模式:

class Foo {
    private(set) var a: Int = 0
    private(set) var b: String = ""
    private(set) var c: Bool = false

    init(a: Int = 0, b: String = "", c: Bool = false) {
        self.a = a
        self.b = b
        self.c = c
    }

    class Builder {
        private var innerFoo = Foo()

        @discardableResult
        func withA(_ a: Int) -> Builder {
            innerFoo.a = a
            return self
        }

        @discardableResult
        func withB(_ b: String) -> Builder {
            innerFoo.b = b
            return self
        }

        @discardableResult
        func withC(_ c: Bool) -> Builder {
            innerFoo.c = c
            return self
        }

        func build() -> Foo {
            return innerFoo
        }
    }
}
Run Code Online (Sandbox Code Playgroud)