[10] 名稱空間擴充套件和鏈式呼叫
思想來自流行的第三方庫,如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"
}
相關文章
- 擴充套件表空間套件
- js 實現鏈式呼叫名稱空間JS
- ubuntu 擴充套件磁碟空間Ubuntu套件
- mysql空間擴充套件 VS PostGISMySql套件
- 擴充套件邏輯卷空間套件
- 表空間自動擴充套件 AUTOALLOCATE 的擴充套件規律套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- php名稱空間的呼叫順序PHP
- Oracle 10g 物理DataGuard擴充套件表空間Oracle 10g套件
- Linux擴充套件LVM空間Linux套件LVM
- HP-UX擴充套件swap空間UX套件
- HP-UNIX擴充套件/tmp空間套件
- 擴充套件系統的磁碟空間套件
- 名稱空間
- 使用p名稱空間和c名稱空間的XML快捷方式XML
- 使用命令擴充套件vmdk磁碟空間套件
- JAXB名稱空間及名稱空間字首處理
- 查詢表空間是否具備自動擴充套件空間套件
- PHP 名稱空間PHP
- PHP名稱空間PHP
- vuex名稱空間Vue
- jQuery 名稱空間jQuery
- JavaScript 名稱空間JavaScript
- oracle UNDO表空間一個bug——undo表空間快速擴充套件Oracle套件
- Python作用域和名稱空間Python
- XML和Schema名稱空間詳解XML
- 內聯和巢狀名稱空間巢狀
- 擴充套件c盤空間有什麼辦法套件
- VirtualBox下Linux(centos)擴充套件磁碟空間LinuxCentOS套件
- 表空間無法擴充套件問題處理套件
- 虛擬磁碟空間滿後的擴充套件方法套件
- Linux 虛擬機器擴充套件磁碟空間Linux虛擬機套件
- linux建立新分割槽擴充套件磁碟空間Linux套件
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- win10怎麼給c盤增加空間_windows10擴充套件c盤空間的方法Win10Windows套件
- 擴充套件表示式套件
- PostgreSQL空間切割(st_split)功能擴充套件-空間物件網格化SQL套件物件
- python名稱空間Python