Last active
March 6, 2017 11:30
-
-
Save mmcbrear/4ffaeec1ea87c090c3e8c10e18bdba41 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// UIViewController+Rx.swift | |
// | |
// Created by Martin McBrearty on 29/04/2016. | |
// | |
import Foundation | |
import RxSwift | |
extension UIViewController { | |
func bind<T>(_ element: UIResponder, observable: Observable<T?>?, disposeBag: DisposeBag?) { | |
guard let disposeBag = disposeBag else { return } | |
observable?.subscribe(onNext: { value in | |
self.ASyncMain { | |
if type(of: element) === UILabel.self { | |
if let value = value as? NSAttributedString { | |
(element as? UILabel)?.attributedText = value | |
} else if let value = value as? String { | |
(element as? UILabel)?.text = value | |
} else if let value = value as? UIColor { | |
(element as? UILabel)?.textColor = value | |
} | |
} else if type(of: element) === UIImageView.self { | |
if let value = value as? UIImage { | |
(element as? UIImageView)?.image = value | |
} | |
} | |
} | |
}).addDisposableTo(disposeBag) | |
} | |
func bindIsHidden(_ element: UIView, observable: Observable<Bool>?, disposeBag: DisposeBag?) { | |
guard let disposeBag = disposeBag else { return } | |
observable?.subscribe(onNext: { value in | |
self.ASyncMain { | |
element.isHidden = value | |
} | |
}).addDisposableTo(disposeBag) | |
} | |
func bindButtonTitle(_ element: UIButton, observable: Observable<String>?, disposeBag: DisposeBag?) { | |
guard let disposeBag = disposeBag else { return } | |
observable?.subscribe(onNext: { value in | |
self.ASyncMain { | |
element.setTitle(value, for: .normal) | |
} | |
}).addDisposableTo(disposeBag) | |
} | |
func bindButtonTitle(_ element: UIButton, observable: Observable<NSAttributedString?>?, disposeBag: DisposeBag?) { | |
guard let disposeBag = disposeBag else { return } | |
observable?.subscribe(onNext: { value in | |
self.ASyncMain { | |
element.setAttributedTitle(value, for: .normal) | |
} | |
}).addDisposableTo(disposeBag) | |
} | |
func bindButtonImage(_ element: UIButton, observable: Observable<String?>?, disposeBag: DisposeBag?) { | |
guard let disposeBag = disposeBag else { return } | |
observable?.subscribe(onNext: { value in | |
self.ASyncMain { | |
if let value = value { | |
if !value.isEmpty { | |
element.setImage(UIImage(named: value), for: UIControlState()) | |
} | |
} | |
} | |
}).addDisposableTo(disposeBag) | |
} | |
func bindButtonSelected(_ element: UIButton, observable: Observable<Bool>?, disposeBag: DisposeBag?) { | |
guard let disposeBag = disposeBag else { return } | |
observable?.subscribe(onNext: { value in | |
self.ASyncMain { | |
element.isSelected = value | |
} | |
}).addDisposableTo(disposeBag) | |
} | |
func bindProductImage(_ element: UIImageView, observable: Observable<NSNumber?>?, disposeBag: DisposeBag?) { | |
guard let disposeBag = disposeBag else { return } | |
observable?.subscribe(onNext: { value in | |
self.ASyncMain { | |
if let value = value { | |
self.loadImage(element, productId: value) | |
} else { | |
element.image = nil | |
} | |
} | |
}).addDisposableTo(disposeBag) | |
} | |
func bind(constraint: NSLayoutConstraint, observable: Observable<CGFloat>?, disposeBag: DisposeBag?) { | |
guard let disposeBag = disposeBag else { return } | |
observable?.subscribe(onNext: { value in | |
self.ASyncMain { | |
constraint.constant = value | |
} | |
}).addDisposableTo(disposeBag) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment