首页 > 解决方案 > swift中的构建器模式设置方法

问题描述

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

var ptype : String? {
    get{
        return self.ptype
    }set (ptype) {
        self.ptype = ptype
    }
}

标签: iosswiftbuilder

解决方案


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

我认为构建器模式的主要优势已经可以通过 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
    }
}

您可以创建一个Foo这样的:

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

我认为这是 Java 中此类内容的更清洁版本:

new FooBuilder()
    .setA(123)
    .setB("Hello World")
    .setC(true)
    .build()

但如果你坚持,这里有一些非常冗长的 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
        }
    }
}

推荐阅读