Note: cs is short for Code Snippets
extension <#type#>: Comparable {
static func < (lhs: <#type#>, rhs: <#type#>) -> Bool {
return lhs.<#property#> < rhs.<#property#>
}
}extension <#type#>: Equatable {
static func == (lhs: <#type#>, rhs: <#type#>) -> Bool {
return lhs.<#property#> == rhs.<#property#>
}
}extension <#type#>: Hashable {
var hashValue: Int {
return <#hashValue#>
}
}<#view#>.snp.makeConstraints {
<#code#>
}<#view#>.snp.updateConstraints {
<#code#>
}$0.top.equalToSuperview().offset(<#value#>)$0.bottom.equalToSuperview().offset(-<#value#>)$0.left.equalToSuperview().offset(<#value#>)$0.right.equalToSuperview().offset(-<#value#>)$0.center.equalTo<#view#>()$0.centerX.equalTo<#view#>()$0.centerY.equalTo<#view#>()$0.height.equalTo(<#height#>)$0.width.equalTo(<#width#>)var <#ivar#>: <#type#> {
get {
return UserDefaults.standard.bool(forKey: <#userdefaultKey#>)
}
set {
UserDefaults.standard.set(newValue, forKey: <#userdefaultKey#>)
UserDefaults.standard.synchronize()
}
}var <#ivar#>: <#codableType#> {
get {
let decoder = JSONDecoder()
if let data = UserDefaults.standard.data(forKey: <#userdefaultKey#>) {
return try? decoder.decode(<#codableType#>.self, from: data)
}
return nil
}
set {
guard let newItems = newValue else { return }
let encoder = JSONEncoder()
if let encoded = try? encoder.encode(newItems) {
UserDefaults.standard.set(encoded, forKey: <#userdefaultKey#>)
}
}
}navigationController?.pushViewController({
let vc = <#VC#>(viewModel: <#VM#>())
vc.hidesBottomBarWhenPushed = true
return vc
}(), animated: true)DispatchQueue.global().async {
DispatchQueue.main.async {
}
}guard let `self` = self else { return }// MARK: Input// MARK: Output// MARK: test only// TODO: <#todo#>static let shared = <#type#>()viewModel.sectionDriver
.drive( tableView.rx.items(dataSource: RxTableViewSectionedReloadDataSource<<#name#>SectionModel>(configureCell: { [weak self] (dataSource, tableView, indexPath, rowModel) -> UITableViewCell in
guard let `self` = self else { return UITableViewCell() }
if let cell = tableView.dequeueReusableCell(withIdentifier: self.cellId, for: indexPath) as? <#name#>Cell {
return cell
} else {
return UITableViewCell()
}
})))
.disposed(by: bag)import UIKit
import RxSwift
import RxCocoa
import RxDataSources
struct <#name#>RowModel {
}
struct <#name#>SectionModel {
var items: [Item]
}
extension <#name#>SectionModel: SectionModelType {
typealias Item = <#name#>RowModel
init(original: <#name#>SectionModel, items: [Item]) {
self = original
self.items = items
}
}import UIKit
import RxSwift
import RxCocoa
import RxDataSources
import SnapKit
@objcMembers class <#name#>VC: UIViewController {
private let viewModel: <#name#>ViewModel
private let bag = DisposeBag()
init(viewModel: <#name#>ViewModel) {
self.viewModel = viewModel
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
setup()
bind()
}
deinit {
}
}
extension <#name#>VC {
private func setup() {
automaticallyAdjustsScrollViewInsets = false
edgesForExtendedLayout = UIRectEdge()
}
private func bind() {
}
}import UIKit
import RxSwift
import RxCocoa
import RxDataSources
@objcMembers class <#name#>VM: NSObject {
private let bag = DisposeBag()
override init() {
super.init()
setup()
bind()
}
}
extension <#name#>VM {
private func setup() {
}
private func bind() {
}
}import UIKit
import RxSwift
import RxCocoa
import RxDataSources
import SnapKit
class <#name#>View: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
setup()
bind()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension <#name#>View {
private func setup() {
}
private func bind() {
}
}class <#cellName#>: UITableViewCell {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}private func <#name#>(<#param#>) -> Observable<<#type#>> {
return Observable<<#type#>>.create { observer in
return Disposables.create()
}
}var navigationBarTitleDriver: Driver<String>!
navigationBarTitleDriver = Driver<String>
.just(NSLocalizedString("<#title#>", tableName: "", bundle: KDLocalized.bundle(), value: "", comment: ""))private let bag = DisposeBag()<#name#>
.drive(onNext: { [weak self] <#param#> in
guard let `self` = self else { return }
})
.disposed(by: bag)<#name#>
.subscribe(onNext: { [weak self] <#param#> in
guard let `self` = self else { return }
})
.disposed(by: bag)var <#name#>Driver: Driver<<#type#>> {
return <#name#>Subject.asDriver(onErrorJustReturn: <#return#>)
}
private var <#name#>Subject = PublishSubject<<#type#>>()var <#name#>Observer: AnyObserver<<#type#>> {
return <#name#>Subject.asObserver()
}
private var <#name#>Subject = PublishSubject<<#type#>>()var <#name#>Observable: Observable<<#type#>> {
return <#name#>Subject.asObservable()
}
private var <#name#>Subject = PublishSubject<<#type#>>() <#observer#> = AnyObserver(eventHandler: { [weak self] (event) in
guard let `self` = self, let element = event.element else { return }
})extension Notification.Name {
static let <#name#> = Notification.Name("<#name#>")
}NSLocalizedString("<#text#>", tableName: "", bundle: KDLocalized.bundle(), value: "", comment: "")let startTime = NSDate()print("Time: \(-startTime.timeIntervalSinceNow)")window = UIWindow(frame: UIScreen.main.bounds)
window?.backgroundColor = UIColor.white
window?.rootViewController = <#ViewController#>()
window?.makeKeyAndVisible()