ios - swift中的构建器模式设置方法
问题描述
我刚刚从 Android 基础转移到 ios,在 swift 中寻找构建器模式获取和设置方法,但找不到类似的东西。仅发现以下
var ptype : String? {
get{
return self.ptype
}set (ptype) {
self.ptype = ptype
}
}
解决方案
在使用了这么多用 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
}
}
}
推荐阅读
- r - 如何比较两个相同大小的组中的病例数?
- javascript - 如何拥有两个具有重复函数和变量的打字稿文件?
- c++ - 加载 DLL 会导致错误 193,即使它可以在 ctypes 和 JNA 中加载
- python - 如何在 Python 中对控制台输出进行空格填充?
- javascript - InnerHTML 没有更新?
- python - 如何获取帐户创建年龄 discord.py
- .htaccess - htaccess / mod_rewrite 命令用于创建硬编码的永久链接
- c# - 在 C# 中编写多线程映射 IEnumerator
- iis - IIS 请求过滤问题
- docker - 在停止的 tomcat docker 容器中调试