После использования стольких библиотек, написанных на Swift, я редко видел, чтобы люди использовали шаблон Builder в Swift.
Я думаю, что основные преимущества Pattern Builder Pattern уже могут быть достигнуты с помощью других языковых функций Swift.Вы можете полностью создать конструктор, в котором все параметры являются необязательными, и вы почти просто воссоздали шаблон построителя в Swift:
class Foo {
let a: Int
let b: String
let var 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
}
}
}