Skip to content

Commit 223697c

Browse files
author
Chris Hu
committed
DemoRxSwift: update DisposeBag
1 parent e038a97 commit 223697c

File tree

5 files changed

+46
-35
lines changed

5 files changed

+46
-35
lines changed

DemoRxSwift/DemoRxSwift.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
A4B5F8031E2F7C8E005BA002 /* ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4B5F8021E2F7C8E005BA002 /* ViewModel.swift */; };
1818
A4B5F8061E306428005BA002 /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4B5F8051E306428005BA002 /* LoginViewController.swift */; };
1919
A4B5F8261E31A3CB005BA002 /* CalculatorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4B5F8251E31A3CB005BA002 /* CalculatorViewController.swift */; };
20+
A4E9F3B11E4968C400818627 /* Global.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4E9F3B01E4968C400818627 /* Global.swift */; };
2021
/* End PBXBuildFile section */
2122

2223
/* Begin PBXFileReference section */
@@ -34,6 +35,7 @@
3435
A4B5F8021E2F7C8E005BA002 /* ViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewModel.swift; sourceTree = "<group>"; };
3536
A4B5F8051E306428005BA002 /* LoginViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = "<group>"; };
3637
A4B5F8251E31A3CB005BA002 /* CalculatorViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CalculatorViewController.swift; sourceTree = "<group>"; };
38+
A4E9F3B01E4968C400818627 /* Global.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Global.swift; sourceTree = "<group>"; };
3739
/* End PBXFileReference section */
3840

3941
/* Begin PBXFrameworksBuildPhase section */
@@ -86,6 +88,7 @@
8688
A4B5F7ED1E2F7AD3005BA002 /* DemoRxSwift */ = {
8789
isa = PBXGroup;
8890
children = (
91+
A4E9F3B01E4968C400818627 /* Global.swift */,
8992
A4B5F7EE1E2F7AD3005BA002 /* AppDelegate.swift */,
9093
A4B5F7F01E2F7AD3005BA002 /* TableViewController.swift */,
9194
A4B5F8051E306428005BA002 /* LoginViewController.swift */,
@@ -230,6 +233,7 @@
230233
A4B5F8061E306428005BA002 /* LoginViewController.swift in Sources */,
231234
A4B5F8261E31A3CB005BA002 /* CalculatorViewController.swift in Sources */,
232235
A4B5F8011E2F7BF8005BA002 /* User.swift in Sources */,
236+
A4E9F3B11E4968C400818627 /* Global.swift in Sources */,
233237
);
234238
runOnlyForDeploymentPostprocessing = 0;
235239
};

DemoRxSwift/DemoRxSwift/CalculatorViewController.swift

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,6 @@ class CalculatorViewController: UIViewController {
2424
@IBOutlet weak var btnClose: UIButton!
2525

2626

27-
28-
let disposeBag = DisposeBag()
29-
30-
3127
deinit {
3228
print("deinit: \(self.description)")
3329
}
@@ -40,7 +36,7 @@ class CalculatorViewController: UIViewController {
4036
.subscribe(onNext: { [weak self] in
4137
self?.dismiss(animated: true, completion: nil)
4238
})
43-
.addDisposableTo(disposeBag)
39+
.addDisposableTo(CS_DisposeBag)
4440

4541

4642

@@ -56,7 +52,7 @@ class CalculatorViewController: UIViewController {
5652
.map { $0.description }
5753
// Obsever为result的text
5854
.bindTo(result.rx.text)
59-
.addDisposableTo(disposeBag)
55+
.addDisposableTo(CS_DisposeBag)
6056

6157
}
6258

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//
2+
// Global.swift
3+
// DemoRxSwift
4+
//
5+
// Created by Chris Hu on 17/2/7.
6+
// Copyright © 2017年 com.icetime17. All rights reserved.
7+
//
8+
9+
import Foundation
10+
import RxSwift
11+
12+
13+
let CS_DisposeBag = DisposeBag()

DemoRxSwift/DemoRxSwift/LoginViewController.swift

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,6 @@ class LoginViewController: UIViewController {
3333
@IBOutlet weak var btnClose: UIButton!
3434

3535

36-
var disposeBag = DisposeBag()
37-
38-
39-
var indicatorView: UIActivityIndicatorView!
40-
41-
4236
deinit {
4337
print("deinit: \(self.description)")
4438
}
@@ -50,20 +44,22 @@ class LoginViewController: UIViewController {
5044

5145
btnClose.rx.tap
5246
.subscribe(onNext: { [weak self] in
53-
self?.dismiss(animated: true, completion: nil)
47+
guard let strongSelf = self else { return }
48+
strongSelf.dismiss(animated: true, completion: nil)
5449
})
55-
.addDisposableTo(disposeBag)
50+
.addDisposableTo(CS_DisposeBag)
5651

5752

5853

5954
// 声明Observable,可观察对象
6055
// username的text没有太多参考意义,因此使用map来加工,得到是否可用的消息
6156
let userValidation = textFieldUsername.rx.text.orEmpty
57+
// map的参数是一个closure,接收element
6258
.map { (user) -> Bool in
6359
let length = user.characters.count
6460
return length >= minUsernameLength && length <= maxUsernameLength
6561
}
66-
.shareReplay(1)
62+
.shareReplay(1)
6763

6864
let passwdValidataion = textFieldPasswd.rx.text.orEmpty
6965
.map{ (passwd) -> Bool in
@@ -75,27 +71,28 @@ class LoginViewController: UIViewController {
7571
// 声明Observable
7672
// 组合两个Observable
7773
let loginValidation = Observable.combineLatest(userValidation, passwdValidataion) {
78-
$0 && $1
79-
}.shareReplay(1)
74+
$0 && $1
75+
}
76+
.shareReplay(1)
8077

8178

8279
// bind,即将Observable与Observer绑定,最终也会调用subscribe
8380
// 此处是将isEnabled视为一个Observer,接收userValidation的消息,做出响应
8481
// 所以Observable发送的消息与Observer能接收的消息要对应起来(此处是Bool)
8582
userValidation
8683
.bindTo(textFieldPasswd.rx.isEnabled)
87-
.addDisposableTo(disposeBag)
84+
.addDisposableTo(CS_DisposeBag)
8885
userValidation
8986
.bindTo(lbUsernameInfo.rx.isHidden)
90-
.addDisposableTo(disposeBag)
87+
.addDisposableTo(CS_DisposeBag)
9188

9289
passwdValidataion
9390
.bindTo(lbPasswdInfo.rx.isHidden)
94-
.addDisposableTo(disposeBag)
91+
.addDisposableTo(CS_DisposeBag)
9592

9693
loginValidation
9794
.bindTo(btnLogin.rx.isEnabled)
98-
.addDisposableTo(disposeBag)
95+
.addDisposableTo(CS_DisposeBag)
9996

10097

10198
// 将tap操作视为一个Observable,添加一些对应的响应操作(订阅),一旦tap执行(即发送消息),则会执行对应的响应代码
@@ -104,18 +101,20 @@ class LoginViewController: UIViewController {
104101
.subscribe(
105102
onNext: { [weak self] in
106103
print("onNext")
107-
self?.login()
104+
guard let strongSelf = self else { return }
105+
strongSelf.login()
108106
},
109107
onCompleted: { [weak self] in
110108
print("onCompleted")
111-
print(self!)
109+
guard let strongSelf = self else { return }
110+
print(strongSelf)
112111
}
113112
)
114-
.addDisposableTo(disposeBag)
113+
.addDisposableTo(CS_DisposeBag)
115114
}
116115

117116
func login() {
118-
indicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.gray)
117+
let indicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.gray)
119118
view.addSubview(indicatorView)
120119
indicatorView.center = view.center
121120

@@ -129,7 +128,7 @@ class LoginViewController: UIViewController {
129128

130129
DispatchQueue.main.async {
131130
print("Done")
132-
self.indicatorView.stopAnimating()
131+
indicatorView.stopAnimating()
133132
}
134133
}
135134
}

DemoRxSwift/DemoRxSwift/TableViewController.swift

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ class TableViewController: UIViewController {
2424
let viewModel = ViewModel()
2525

2626

27-
let disposeBag = DisposeBag()
28-
29-
3027
override func viewDidLoad() {
3128
super.viewDidLoad()
3229

@@ -46,9 +43,11 @@ class TableViewController: UIViewController {
4643
// ViewModel中负责生成数据相关的Observable,然后跟Observer(items)绑定
4744
viewModel.getUsers()
4845
.bindTo(tableView.rx.items(dataSource: dataSource))
49-
.addDisposableTo(disposeBag)
46+
.addDisposableTo(CS_DisposeBag)
5047

5148

49+
// 通过modelSelected可直接拿到Model,
50+
// 而itemSelected则是indexPath
5251
tableView.rx
5352
.modelSelected(User.self)
5453
.subscribe(onNext: { user in
@@ -58,7 +57,7 @@ class TableViewController: UIViewController {
5857
let loginVC = storyboard.instantiateViewController(withIdentifier: "LoginViewController")
5958
self.present(loginVC, animated: true, completion: nil)
6059
})
61-
.addDisposableTo(disposeBag)
60+
.addDisposableTo(CS_DisposeBag)
6261

6362

6463

@@ -75,31 +74,31 @@ class TableViewController: UIViewController {
7574
dataSource.bindTo(tableView.rx.items(cellIdentifier: "Cell", cellType: UITableViewCell.self)) {
7675
(row, element, cell) in
7776
cell.textLabel?.text = "\(element) - \(row)"
78-
}.addDisposableTo(disposeBag)
77+
}.addDisposableTo(CS_DisposeBag)
7978

8079
// 点击cell
8180
tableView.rx
8281
.modelSelected(String.self)
8382
.subscribe(onNext: { value in
8483
print(value)
8584
})
86-
.addDisposableTo(disposeBag)
85+
.addDisposableTo(CS_DisposeBag)
8786

8887
// 点击AccessoryButton
8988
tableView.rx
9089
.itemAccessoryButtonTapped
9190
.subscribe(onNext: { indexPath in
9291
print(indexPath)
9392
})
94-
.addDisposableTo(disposeBag)
93+
.addDisposableTo(CS_DisposeBag)
9594

9695
// 监听contentOffset
9796
tableView.rx.contentOffset
9897
.map { $0.y }
9998
.subscribe(onNext: { (offset) in
10099
print(offset)
101100
})
102-
.addDisposableTo(disposeBag)
101+
.addDisposableTo(CS_DisposeBag)
103102
*/
104103

105104
}

0 commit comments

Comments
 (0)