RxSwift文档翻译9 - Debugging Operators

前言

本文主要介绍一些调试相关的操作

  • **debug **
    会打印所有的订阅,时间 和 disposals
example("debug") {
    let disposeBag = DisposeBag()
    var count = 1
    
    let sequenceThatErrors = Observable<String>.create { observer in
        observer.onNext("🍎")
        observer.onNext("🍐")
        observer.onNext("🍊")
        
        if count < 5 {
            observer.onError(TestError.test)
            print("Error encountered")
            count += 1
        }
        
        observer.onNext("🐶")
        observer.onNext("🐱")
        observer.onNext("🐭")
        observer.onCompleted()
        
        return Disposables.create()
    }
    
    sequenceThatErrors
        .retry(3)
        .debug()
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
}

// 控制台打印的结果:
--- debug example ---
2017-06-02 15:20:10.104: ViewController.swift:64 (viewDidLoad()) -> subscribed
2017-06-02 15:20:10.112: ViewController.swift:64 (viewDidLoad()) -> Event next(🍎)
🍎
2017-06-02 15:20:10.112: ViewController.swift:64 (viewDidLoad()) -> Event next(🍐)
🍐
2017-06-02 15:20:10.113: ViewController.swift:64 (viewDidLoad()) -> Event next(🍊)
🍊
Error encountered
2017-06-02 15:20:10.115: ViewController.swift:64 (viewDidLoad()) -> Event next(🍎)
🍎
2017-06-02 15:20:10.115: ViewController.swift:64 (viewDidLoad()) -> Event next(🍐)
🍐
2017-06-02 15:20:10.115: ViewController.swift:64 (viewDidLoad()) -> Event next(🍊)
🍊
Error encountered
2017-06-02 15:20:10.115: ViewController.swift:64 (viewDidLoad()) -> Event next(🍎)
🍎
2017-06-02 15:20:10.116: ViewController.swift:64 (viewDidLoad()) -> Event next(🍐)
🍐
2017-06-02 15:20:10.116: ViewController.swift:64 (viewDidLoad()) -> Event next(🍊)
🍊
Error encountered
2017-06-02 15:20:10.120: ViewController.swift:64 (viewDidLoad()) -> Event error(test)
2017-06-02 15:20:10.120: ViewController.swift:64 (viewDidLoad()) -> isDisposed
  • RxSwift.Resources.total
    提供所有Rx资源分配的计数,用于开发期间检测泄漏
    ** 默认使用RxSwift.Resources.total会报错,需要修改pod文件,修改完毕之后重新pod ,然后编译就可以了**
target 'AppTarget' do
pod 'RxSwift'
end

post_install do |installer|
    installer.pods_project.targets.each do |target|
        if target.name == 'RxSwift'
            target.build_configurations.each do |config|
                if config.name == 'Debug'
                    config.build_settings['OTHER_SWIFT_FLAGS'] ||= ['-D', 'TRACE_RESOURCES']
                end
            end
        end
    end
end

事例程序

example("RxSwift.Resources.total") {
    print(RxSwift.Resources.total)
    
    let disposeBag = DisposeBag()
    
    print(RxSwift.Resources.total)
    
    let variable = Variable("🍎")
    
    let subscription1 = variable.asObservable().subscribe(onNext: { print($0) })
    
    print(RxSwift.Resources.total)
    
    let subscription2 = variable.asObservable().subscribe(onNext: { print($0) })
    
    print(RxSwift.Resources.total)
    
    subscription1.dispose()
    
    print(RxSwift.Resources.total)
    
    subscription2.dispose()
    
    print(RxSwift.Resources.total)
}
  
// 控制台打印的结果:
--- RxSwift.Resources.total example ---
0
2
🍎
8
🍎
10
9
8
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 看了前几篇关于RxSwift主要概念的文章,会对RxSwift有个大致的了解,这篇文章会详细讲述如何使用Rx...
    最Fly的Engine人阅读 13,099评论 3 40
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,966评论 25 709
  • 1 大脑 brain cerebrum cerebrum是专业的医学术语,特指解剖学里的大脑。 2 古皮质 arc...
    金石明镜阅读 6,221评论 0 1
  • 这个世界上,真的有一见钟情呢。现在还清楚的记得第一次见你的样子,马尾辫,蓝棉袄,黑色长裤与雪地靴。第一次见你内心就...
    我再也不会对你有秘密阅读 161评论 0 1