iOS Swift RxSwift 的使用(一)

19 篇文章 1 订阅
7 篇文章 2 订阅

从今天开始主要开始讲解RxSwfit的使用

大家都知道iOS 目前主流的开发语言一个Objective-C还有一个就是Swift,还有人说SwiftUI,这里要说明一下SwiftUI并不是开发语言,它是一个UI框架,是苹果2019年推出的新的UI框架,但是SwiftUI最低需要iOS13,版本要求过高,而我们在开发过程中还要兼容很低版本,例如我们公司最低兼容iOS9.0,所以SwiftUI就得放弃了,所以这里我们不做介绍,而Objective-C还、Swift这两个语言都满足开发应用的要求,那么为什么现在OC开发的人开始日益减少了呢,而Swift却明显的呈现上升趋势呢?

下面我就来简单的说一下Swift相对于OC的优势。

优点:

1、 简洁的语法:

我们不得不承认的是swift语言比OC精简,整个项目中丢掉了头文件,以及头文件的引入。

2、报错精准:

报错的时候直接显示报错行。

3、定义变量简单:

定义变量不用区分整型,浮点型等等,变量使用var,常量使用let,并且还带来元组。

4、可视化互动效果:

开发工具带来了Xcode Playgrounds功能,该功能提供强大的互动效果,能让Swift源代码在撰写过程中实时显示出其运行结果。

5、函数式编程的支持:

Swift 语言本身提供了对函数式编程的支持;

Objc 本身是不支持的,通过引入 ReactiveCocoa 这个库才可支持函数式编程。

随着Swift越来越成熟、越来越稳定,他的功能覆盖的也越来越强大,而今天的RxSwfit让具有函数式编程的Swift还有响应式编程的能力。

什么是响应式编程呢?

响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。


上面说的都是Swift的优势,那RxSwift又是什么呢

RxSwift介绍 

说到RxSwift就要说的ReactiveX,RxSwift 是 ReactiveX中一个,ReactiveX还有 RxJavaRxJSRxKotlinRx.NET等等。 

ReactiveX是 Reactive Extensions 的缩写,一般简写为Rx。

ReactiveX 官方给Rx的定义是,Rx是一个使用可观察数据流进行异步编程的编程接口。
ReactiveX 不仅仅是一个编程接口,它是一种编程思想的突破,它影响了许多其它的程序库和框架以及编程语言。它拓展了观察者模式,使你能够自由组合多个异步事件,而不需要去关心线程,同步,线程安全,并发数据以及I/O阻塞。
RxSwift 是 Rx 为 Swift 语言开发的一门函数响应式编程语言, 它可以代替iOS系统的 Target Action /代理闭包 / 通知 / KVO …..
同时还提供网络、数据绑定、UI事件处理、UI的展示和更新、多线程……

想要更详细的了解RxSwift可以前往查看RxSwift主页查看以及RxSwift中文文档

下面我来简单的说一下RxSwift的使用

RxSwift是一个库,我们只要引入即可使用,这里我以CocoaPods为例

1、首先我们创建一个项目然后进入工程目录下输入下面的命令

pod init

 然后会生成Podfile文件,然后在Podfile文件输入下面内容既可

    # Rx
    pod 'RxSwift'
    pod 'RxCocoa'
    pod 'RxDataSources'

2、然后我们再输入下面命令等待安装即可

pod install

下面就是RxSwfit的使用了

1、打开工程找到要使用RxSwift的地方引包即可

import RxSwift
import RxCocoa

2、下面就是使用了,我们今天就现以最简单的UILabel为例,大家都知道UILabel就是一个展示文字的作用,所以这里我们就以UILabel的普通文本展示和富文本展示两种进行演示,由于UILabel是一个展示作用,所以这里我要使用定时器,而RxSwfit也对定时器进行了处理,下面就是RxSwfit定时器的创建

//Observable - 可监听序列,0.1 代表的是执行间隔, MainScheduler.instance主线程并解决了很多缺陷,这里只演示使用,如果想要了解这些可以参考下面链接
//🔗https://beeth0ven.github.io/RxSwift-Chinese-Documentation/content/rxswift_core/observable.html
let timer = Observable<Int>.interval(0.1, scheduler: MainScheduler.instance)

我们通过Xib或者storyboard拖拽一个UILabel控件

@IBOutlet weak var label: UILabel!

1、普通文本,上面定时器创建和UILabel成功了,下面就是要接受定时器的执行事件

    /// 普通文本,timer.map是一个闭包,对swift了解的应该知道$0是代表什么就是闭包里的内容,这里就代表定时累计执行的内容,bind(to: label.rx.text),很好理解,就是将闭包里的内容绑定到Label的text上进行展示
    func displayOrdinaryText() {
        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、富文本


    /// 富文本和普通文本没有太大差别,最大差别就是.bind(to: label.rx.text)替换成attributedText
    func displayTheRichText() {
        timer.map(
            formatTimeInterval(ms:)
        ).bind(to: label.rx.attributedText).disposed(by: disposeBag)
    }
    
    /// 富文本
    /// - Parameter ms: 时间
    func formatTimeInterval(ms: NSInteger) -> NSMutableAttributedString {
        let string = String(format: "%0.2d:%0.2d.%0.1d",arguments: [(ms / 600) % 600, (ms % 600 ) / 10, ms % 10])
        //富文本设置
        let attributeString = NSMutableAttributedString(string: string)
        //从文本0开始6个字符字体HelveticaNeue-Bold,16号
        attributeString.addAttribute(NSAttributedString.Key.font,
                                     value: UIFont(name: "HelveticaNeue-Bold", size: 16)!,
                                     range: NSMakeRange(0, 5))
        //设置字体颜色
        attributeString.addAttribute(NSAttributedString.Key.foregroundColor,
                                     value: UIColor.white, range: NSMakeRange(0, 5))
        //设置文字背景颜色
        attributeString.addAttribute(NSAttributedString.Key.backgroundColor,
                                     value: UIColor.orange, range: NSMakeRange(0, 5))
        return attributeString
    }

3、下面附上完整代码


import UIKit
import RxSwift
import RxCocoa
class LabelVC: ViewController {

    @IBOutlet weak var label: UILabel!
    let timer = Observable<Int>.interval(0.1, scheduler: MainScheduler.instance)
    override func viewDidLoad() {
        super.viewDidLoad()
        displayOrdinaryText()
//        displayTheRichText()
    }
    
    /// 普通文本
    func displayOrdinaryText() {
        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)
    }
    
    /// 富文本
    func displayTheRichText() {
        timer.map(
            formatTimeInterval(ms:)
        ).bind(to: label.rx.attributedText).disposed(by: disposeBag)
    }
    
    /// 富文本
    /// - Parameter ms: 时间
    func formatTimeInterval(ms: NSInteger) -> NSMutableAttributedString {
        let string = String(format: "%0.2d:%0.2d.%0.1d",arguments: [(ms / 600) % 600, (ms % 600 ) / 10, ms % 10])
        //富文本设置
        let attributeString = NSMutableAttributedString(string: string)
        //从文本0开始6个字符字体HelveticaNeue-Bold,16号
        attributeString.addAttribute(NSAttributedString.Key.font,
                                     value: UIFont(name: "HelveticaNeue-Bold", size: 16)!,
                                     range: NSMakeRange(0, 5))
        //设置字体颜色
        attributeString.addAttribute(NSAttributedString.Key.foregroundColor,
                                     value: UIColor.white, range: NSMakeRange(0, 5))
        //设置文字背景颜色
        attributeString.addAttribute(NSAttributedString.Key.backgroundColor,
                                     value: UIColor.orange, range: NSMakeRange(0, 5))
        return attributeString
    }
    
}

这里只是一个参考,RxSwfit拥有更方便的功能。

到这里可能很多小伙伴并没有RxSwift到底有多强,感觉也没有少很多代码啊,可是大家要知道,UILabel就是一个最简单控件了,他就是一个赋值展示的作用,可是后期当我们学习到TableView、CollectionView以及RxSwift+MVVM+Moya时,你就会发现RxSwift真正强大的地方。

下面是本人学习过程自己写的一个demo,感兴趣的小伙伴大家可以下载看一看。


Csdn下载

Gitbub下载


RxSwift 学习(二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王 哪跑!!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值