? ? ? ? RxSwift
是一個(gè)用于與 Swift
語(yǔ)言交互的框架胚想,但它只是基礎(chǔ),并不能用來(lái)進(jìn)行用戶交互位谋、網(wǎng)絡(luò)請(qǐng)求等式曲。
? ? ? ? 而 RxCocoa
是讓 Cocoa APIs
更容易使用響應(yīng)式編程的一個(gè)框架全谤。RxCocoa
能夠讓我們方便地進(jìn)行響應(yīng)式網(wǎng)絡(luò)請(qǐng)求、響應(yīng)式的用戶交互、綁定數(shù)據(jù)模型到 UI
控件等等。而且大多數(shù)的 UIKit
控件都有響應(yīng)式擴(kuò)展瞻离,它們都是通過(guò) rx
屬性進(jìn)行使用。
? ? ? ? 在接下來(lái)的系列文章中乒裆,我將通過(guò)樣例演示 RxCocoa
下各個(gè) UI
控件的用法套利。
一、UILabel
1,將數(shù)據(jù)綁定到 text 屬性上(普通文本)
(1)下面樣例當(dāng)程序啟動(dòng)時(shí)就開(kāi)始計(jì)時(shí)肉迫,同時(shí)將已過(guò)去的時(shí)間格式化后顯示在 label
標(biāo)簽上验辞。
(2)樣例代碼
import UIKit
import RxSwift
import RxCocoa
class ViewController: UIViewController {
let disposeBag = DisposeBag()
override func viewDidLoad() {
//創(chuàng)建文本標(biāo)簽
let label = UILabel(frame:CGRect(x:20, y:40, width:300, height:100))
self.view.addSubview(label)
//創(chuàng)建一個(gè)計(jì)時(shí)器(每0.1秒發(fā)送一個(gè)索引數(shù))
let timer = Observable<Int>.interval(0.1, scheduler: MainScheduler.instance)
//將已過(guò)去的時(shí)間格式化成想要的字符串,并綁定到label上
timer.map{ String(format: "%0.2d:%0.2d.%0.1d",
arguments: [($0 / 600) % 600, ($0 % 600 ) / 10, $0 % 10]) }
.bind(to: label.rx.text)
.disposed(by: disposeBag)
}
}
2喊衫,將數(shù)據(jù)綁定到 attributedText 屬性上(富文本)
(1)這個(gè)樣例功能和前面樣例是一樣的跌造,不過(guò)我們修改了分和秒這部分的文字樣式,以及背景色族购。
(2)樣例代碼
import UIKit
import RxSwift
import RxCocoa
class ViewController: UIViewController {
let disposeBag = DisposeBag()
override func viewDidLoad() {
//創(chuàng)建文本標(biāo)簽
let label = UILabel(frame:CGRect(x:20, y:40, width:300, height:100))
self.view.addSubview(label)
//創(chuàng)建一個(gè)計(jì)時(shí)器(每0.1秒發(fā)送一個(gè)索引數(shù))
let timer = Observable<Int>.interval(0.1, scheduler: MainScheduler.instance)
//將已過(guò)去的時(shí)間格式化成想要的字符串壳贪,并綁定到label上
timer.map(formatTimeInterval)
.bind(to: label.rx.attributedText)
.disposed(by: disposeBag)
}
//將數(shù)字轉(zhuǎn)成對(duì)應(yīng)的富文本
func formatTimeInterval(ms: NSInteger) -> NSMutableAttributedString {
let string = String(format: "%0.2d:%0.2d.%0.1d",
arguments: [(ms / 600) % 600, (ms % 600 ) / 10, ms % 10])
//富文本設(shè)置
let attributeString = NSMutableAttributedString(string: string)
//從文本0開(kāi)始6個(gè)字符字體HelveticaNeue-Bold,16號(hào)
attributeString.addAttribute(NSAttributedStringKey.font,
value: UIFont(name: "HelveticaNeue-Bold", size: 16)!,
range: NSMakeRange(0, 5))
//設(shè)置字體顏色
attributeString.addAttribute(NSAttributedStringKey.foregroundColor,
value: UIColor.white, range: NSMakeRange(0, 5))
//設(shè)置文字背景顏色
attributeString.addAttribute(NSAttributedStringKey.backgroundColor,
value: UIColor.orange, range: NSMakeRange(0, 5))
return attributeString
}
}