美文网首页
Signal和SignalProducer的简单使用

Signal和SignalProducer的简单使用

作者: 煎包小混沌 | 来源:发表于2018-08-08 11:15 被阅读0次
一:Signal:信号(主要包含:信号观察者,信号发射器)<<<基本使用方法:>>>创建一个Signal,添加观察者,信号发射器发送信号
创建方式1:正常流程
//1:使用pipe()函数创建
let (sig, obr) = Signal<String, NoError>.pipe()
//sig:信号,可以添加观察者
//obr:信号发射器

//2.0:添加观察者:observeValues
sig.observeValues { (text) in
            print("\(text)")
}
//2.1:添加观察者:observe
sig.observe { (event) in
            print("\(event.value)")
}
//会接收两次事件

//3:发送数据
obr.send(value: "aaaaa")

//4:打印
aaaaa
Optional("aaaaa")
nil

创建方式2:内部添加观察者
//1:创建一个内部观察者,并返回一个信号发射器
let sig11 = Signal<String, NoError>.Observer.init { (event) in
            print("\(event.value)")
}

//2:发送数据
sig11.send(value: "aaaaa")

//3:打印
Optional("aaaaa")
创建方式3:(信号绑定另一个观察者)
//1:使用pipe()函数创建
let (sig, obr) = Signal<String, NoError>.pipe()
//sig:信号,可以添加订阅
//obr:信号发射器

//2:创建信号观察者
        let sig11 = Signal<String, NoError>.Observer.init { (event) in
            print("222\(event.value)")
        }

//3:绑定观察者
       sig.observe(sig11)

//4:发送数据
      obr.send(value: "aaaaa")

//5:打印
222Optional("aaaaa")
222nil
二:SignalProducer:对于Signal的封装,预先创建好信号发射器,调用用start()方法执行信号发射,适用于网络请求等场景。
1:正常创建一个SignalProducer
//1:初始化SignalProducer
let sProducer = SignalProducer<String, NoError>() { (observer, _) in
            observer.send(value: "aaaaa")
            print("bbbbbb")
            observer.sendCompleted()
 }
//observer:信号发射器,创建的时候已经定义好
//可以在里面写上网络请求代码,得到返回后调用observer.send(data)

2.0:调用start()执行
sProducer.start()

2.1:调用startWithValues()可以接收到值
sProducer.startWithValues { (text) in
            print("\(text)")
}
//2.1.1:打印
aaaaa
bbbbbb
2:使用Signal作为观察者
//1:初始化SignalProducer
let sProducer = SignalProducer<String, NoError>() { (observer, _) in
            observer.send(value: "aaaaa")
            print("bbbbbb")
            observer.sendCompleted()
 }

//2:初始化一个Signal观察者(接收的是事件)
let siganle = Signal<String, NoError>.Observer() { text in
            print("\(text.value)")
        }

//3:发送
sProducer.start(siganle)

//4:打印
Optional("aaaaa")
bbbbbb
nil
三:combineLatest:连接信号
let (sig1, Ober1) = Signal<String, NoError>.pipe()
        let (sig2, Ober2) = Signal<String, NoError>.pipe()
        let sig3 = sig1.combineLatest(with: sig2).map { (a1, a2) -> Bool in
            if a1 + a2 == "11" {
                return true
            }
            return false
        }
        sig3.observeValues { (a) in
            
        }
        Ober1.send(value: "111111")
        Ober2.send(value: "222222")
//这里sig1和sig2连接在一起,任意一个信号收到消息都会调用combineLatest闭包
//使用map映射返回一个bool类型
//一般可以监听登录界面的两个textField框,来判断登录按钮的状态

相关文章

  • Signal和SignalProducer的简单使用

    一:Signal:信号(主要包含:信号观察者,信号发射器)<<<基本使用方法:>>>创建一个Signal,添加观察...

  • SignalProducer简单模型

    仿照RAS实现SignalProducer SignalProducer的作用: 与Signal相比,Signal...

  • ReactiveCocoa - Swift 解读系列三:Sign

    SignalProducer是RAS对Signal的封装。之前我们使用Signal的时候,我们会先定义一个信号,并...

  • Swift中的RactiveCocoa

    目录 Event Observer Signal SignalProducer Property/MutableP...

  • RxSwift冷热信号

    ReactiveCocoa 针对热、冷信号分别提供了这两种类型:Signal与SignalProducer。而 R...

  • Linux信号处理相关API介绍

    信号处理 signal和signaction函数,signal是最原始的API,提供的接口比sigaction简单...

  • Python和Signal

    先简单说一下Signal是啥.(如果想直接使用可以不看) Signal翻译过来中文就是信号- -当然, 本身他就是...

  • [python]signal

    signal包的核心是使用signal.signal()函数来预设(register)信号处理函数,singnal...

  • ReactiveSwift(下)

    SignalProducer SignalProducer是ReactiveSwift中冷信号的实现, 是第二种发...

  • ReactiveCocoa 3.0 简介

    RAC3创建Signal 项目中添加ReactiveCocoa最简单的方式是使用Carthage,创建如下的Car...

网友评论

      本文标题:Signal和SignalProducer的简单使用

      本文链接:https://www.haomeiwen.com/subject/yubzvftx.html