思想来自流行的第三方库,如RxSwift、Kingfisher、SnapKit等。
代码如下:
// 命名空间扩展
struct Wrapper<Base> {
let base: Base
init(_ base: Base) {
self.base = base
}
}
protocol Wrapperable {
associatedtype CompatibleType
var rx: Wrapper<CompatibleType> { get }
}
extension Wrapperable {
var rx: Wrapper<Self> {
return Wrapper(self)
}
}
import UIKit
extension UIView: Wrapperable { }
// 扩展链式调用方法
extension Wrapper where Base: UIView {
func adhere(toSuperView: UIView) -> Wrapper<Base> {
toSuperView.addSubview(self.base)
return self
}
@discardableResult
public func layout(snapKitMaker: (ConstraintMaker) -> Void) -> Wrapper<Base> {
self.base.snp.makeConstraints { (make) in
snapKitMaker(make)
}
return self
}
@discardableResult
func config(_ config: (Base) -> Void) -> Wrapper<Base> {
config(self.base)
return self
}
}
// 使用
let label = UILabel().rx.adhere(toSuperView: UIView()).config { (label) in
label.text = "Hello World"
}