ReusableView
需求
- iOS 9.0+
- osX 10.10+
- Xcode 9+
- Swift 4
- RxCocoa 4.0+
安装
ReusableView 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中即可
pod 'ReusableView'
使用
通过以下协议之一扩展您的类,并免费获得 .viewModel 属性。每次 viewModel 变化时,都会释放之前的订阅(通过释放之前的 reuseBag)并再次调用 onUpdate
方法。
不可复用类型 - 如果您的视图不应被复用。所有后续尝试设置viewModel将只会调用onAttemptToReuse方法。(允许您确保vm只有一个。通常与UIViewControllers一起使用。)
可复用类型 - 如果您的视图支持复用。viewModelWillUpdate将在每次赋值之前被调用。(可用于与单元格、StackView中的视图等一起使用)
方法
prepareForUsage() - 只在第一次赋值之前调用一次,可用来初始化视图。(查看默认实现)
viewModelWillUpdate() - 在每次赋值之前调用。
示例
protocol MainViewModelType {
var child: Driver<ChildViewModelType> { get }
}
protocol ChildViewModelType {
var title: Driver<String> { get }
}
class MainViewController: UIViewController, NonReusableType {
@IBOutlet weak var childView: ChildView!
func onUpdate(with viewModel: MainViewModelType, reuseBag: DisposeBag) {
viewModel.child.drive(childView.rx.viewModel).disposed(by: reuseBag)
}
}
class ChildView: UIView, ReusableType {
@IBOutlet weak var label: UILabel!
// parameter reuseBag will be new for each new viewModel.
func onUpdate(with viewModel: ChildViewModelType, reuseBag: DisposeBag) {
viewModel.title.drive(label.rx.text).disposed(by: reuseBag)
}
}
作者
Artem Antihevich, [email protected]
许可
ReusableView许可署Filename:ReusableView 支持在MIT许可下使用。有关更多信息,请参阅LICENSE文件。