使用泛型重构 BaseViewController。

This commit is contained in:
Fin 2022-03-25 14:57:18 +08:00
parent 7133530b0e
commit 51ac6c01e4
7 changed files with 9 additions and 31 deletions

View File

@ -8,9 +8,9 @@
import Material
import UIKit
class BaseViewController: UIViewController {
let viewModel: ViewModel
init(viewModel: ViewModel) {
class BaseViewController<T>: UIViewController where T: ViewModel {
let viewModel: T
init(viewModel: T) {
self.viewModel = viewModel
super.init(nibName: nil, bundle: nil)

View File

@ -14,7 +14,7 @@ import RxDataSources
import RxSwift
import UIKit
class GroupFilterViewController: BaseViewController {
class GroupFilterViewController: BaseViewController<GroupFilterViewModel> {
let doneButton: BKButton = {
let btn = BKButton()
btn.setTitle(NSLocalizedString("done"), for: .normal)
@ -63,10 +63,6 @@ class GroupFilterViewController: BaseViewController {
}
override func bindViewModel() {
guard let viewModel = self.viewModel as? GroupFilterViewModel else {
return
}
let output = viewModel.transform(
input: GroupFilterViewModel.Input(
showAllGroups: self.showAllGroupsButton.rx

View File

@ -13,7 +13,7 @@ import RxSwift
import UIKit
import UserNotifications
class HomeViewController: BaseViewController {
class HomeViewController: BaseViewController<HomeViewModel> {
let newButton: BKButton = {
let btn = BKButton()
btn.setImage(Icon.add, for: .normal)
@ -75,10 +75,6 @@ class HomeViewController: BaseViewController {
}
override func bindViewModel() {
guard let viewModel = self.viewModel as? HomeViewModel else {
return
}
// APP
let authorizationStatus = Single<UNAuthorizationStatus>.create { single -> Disposable in
UNUserNotificationCenter.current().getNotificationSettings { settings in

View File

@ -30,7 +30,7 @@ enum MessageDeleteType: Int {
}
}
class MessageListViewController: BaseViewController {
class MessageListViewController: BaseViewController<MessageListViewModel> {
let deleteButton: BKButton = {
let btn = BKButton()
btn.setImage(UIImage(named: "baseline_delete_outline_black_24pt"), for: .normal)
@ -96,10 +96,6 @@ class MessageListViewController: BaseViewController {
}
override func bindViewModel() {
guard let viewModel = self.viewModel as? MessageListViewModel else {
return
}
let batchDelete = deleteButton.rx
.tap
.flatMapLatest { _ -> PublishRelay<MessageDeleteType> in

View File

@ -9,7 +9,7 @@
import Material
import RxDataSources
import UIKit
class MessageSettingsViewController: BaseViewController {
class MessageSettingsViewController: BaseViewController<MessageSettingsViewModel> {
let tableView: UITableView = {
let tableView = UITableView()
tableView.separatorStyle = .none
@ -34,9 +34,6 @@ class MessageSettingsViewController: BaseViewController {
}
override func bindViewModel() {
guard let viewModel = self.viewModel as? MessageSettingsViewModel else {
return
}
let output = viewModel.transform(
input: MessageSettingsViewModel.Input(
itemSelected: self.tableView.rx.modelSelected(MessageSettingItem.self).asDriver(),

View File

@ -13,7 +13,7 @@ import SafariServices
import SnapKit
import UIKit
class NewServerViewController: BaseViewController {
class NewServerViewController: BaseViewController<NewServerViewModel> {
let scanButton: BKButton = {
let button = BKButton()
button.setImage(UIImage(named: "baseline_qr_code_scanner_black_24pt"), for: .normal)
@ -74,9 +74,6 @@ class NewServerViewController: BaseViewController {
}
override func bindViewModel() {
guard let viewModel = self.viewModel as? NewServerViewModel else {
return
}
//
let noticeTap = noticeLabel.gestureRecognizers!.first!.rx
.event

View File

@ -15,7 +15,7 @@ import RxCocoa
import RxDataSources
import RxSwift
class SoundsViewController: BaseViewController {
class SoundsViewController: BaseViewController<SoundsViewModel> {
let tableView: UITableView = {
let tableView = UITableView()
tableView.backgroundColor = BKColor.background.primary
@ -42,10 +42,6 @@ class SoundsViewController: BaseViewController {
}
override func bindViewModel() {
guard let viewModel = viewModel as? SoundsViewModel else {
return
}
let output = viewModel.transform(
input: SoundsViewModel.Input(soundSelected: self.tableView.rx
.modelSelected(SoundCellViewModel.self)