在日常开发中,使用 Swift 实现链式调用时,会写出以下类似代码:
class Person {
var id: Int?
var name: String?
var age: Int?
var nickName: String?
func id(_ id: Int?) -> Person {
self.id = id
return self
}
func name(_ name: String?) -> Person {
self.name = name
return self
}
func age(_ age: Int?) -> Person {
self.age = age
return self
}
func nickName(_ nickName: String?) -> Person {
self.nickName = nickName
return self
}
}
let person = Person().age(18).name("Bob").id(1).nickName("Job")
....
如果只是那么一两个类需要实现链式调用,问题还不是很大,当遇到一个项目里几乎所有的类都需要实现链式调用时,这样写起来,不仅代码量大,而且重复工作太多,耗时耗力,给我们带来非常大的痛苦。
在经历过多次此种痛苦后,终于受不了这种写法,想寻找一个新的、酷的、省力气的实现链式调用的方式,经过一两个小时的探索,终于 CNChainWrapper
诞生了,目前本人已经加入到项目中。
在 Podfile 中添加下面代码,然后执行 pod install
pod 'CNChainWrapper'
敬请期待
敬请期待
在需要使用的 swift 文件中导入 CNChainWrapper
即可
import CNChainWrapper
想要链式调用时,只需要优先调用 cn
即可,代码如下:
- 继承自
NSObject
的类
class Student: NSObject {
var id: Int?
var name: String?
var age: Int?
var nickName: String?
}
let student = Student().cn
.id(1)
.name("Bob")
.nickName("Job")
.age(18)
省时省力,只需要给类定义好属性即可
- 非继承自 NSObjec 的类
实现方法与 Struct 类似,遵守 CNChainWrapperCompatible 即可,可参考 Struct
Struct
需要特殊处理一下,也不难,只需要遵守 CNChainWrapperCompatible 即可, 代码如下:
struct Child: CNChainWrapperCompatible {
var id: Int?
var name: String?
var age: Int?
var nickName: String?
}
let child = Child().cn
.id(1)
.name("Bob")
.nickName("Job")
.age(18)
注: enum,目前还没有测试过,等以后需要了再测试~