Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在RxSwift中手动发出事件_Ios_Swift_Reactive Cocoa_Rx Swift - Fatal编程技术网

Ios 在RxSwift中手动发出事件

Ios 在RxSwift中手动发出事件,ios,swift,reactive-cocoa,rx-swift,Ios,Swift,Reactive Cocoa,Rx Swift,我是RxSwift的新手,需要非常基本的帮助。 假设我有一个可观察的,并像这样订阅它 let source: Observable<Void> = Observable.create { [weak self] observer in guard let _ = self else { observer.on(.Completed) return NopDisposable.instance }

我是RxSwift的新手,需要非常基本的帮助。
假设我有一个可观察的,并像这样订阅它

 let source: Observable<Void> = Observable.create { [weak self] observer in

        guard let _ = self else {
            observer.on(.Completed)
            return NopDisposable.instance
        }

        observer.on(.Next())

        return AnonymousDisposable {

        }
    }
问题是:如何在每次需要时手动将事件发送到subscribeNext。这类似于
ui按钮上的
rx\u点击
行为

我在示例代码中看到类似这样的东西
source=button.rx\u tap.asObservale()
。之后,每次用户点击按钮,都会在subscribeNext()上发出一个事件和触发器。我也希望有这种行为,但以编程方式,而不是从UI事件。

大多数情况下,您可以组合您的可观察对象,我将给出的解决方案不是执行Rx代码的推荐方法

您可以查看以实现您请求的行为。这个主题有多种变体,文档对此进行了很好的解释

受RxSwift启发的示例用法:

let subject=PublishSubject()
_=subject.subscribeNext{中的内容
打印(内容)
}
主题。关于(.Next(“a”))
主题。关于(.Next(“b”))
这将打印
“a”
,然后打印
“b”


有关何时使用主题或不使用主题的更多详细信息,我建议阅读。

对于驱动程序,您可以这样做

var isSearching: Driver<Bool>

isSearching = Driver.just(true)
var正在搜索:驱动程序
isSearching=Driver.just(true)

Hi@tomah,您的解决方案有效。然而,你提到它“不是推荐的方式”的原因是什么?如果将它与
AnyObserver

AnyObserver
进行比较,我们可以像这样使用它:
var beginLoad:AnyObserver?
beginLoad=AnyObserver(eventHandler:{(event)->Void in print(“1234543”)}
beginLoad.on(.Next())
另外,
PublishSubject()
不是一个可观察的
,所以我们不能在它上面使用操作符(flatten,concat…)。你可以调用主题上的
asObservable()
来获得它作为一个可观察的
。主题最常用于包装命令式API。您通常会在已有的可观测数据的基础上进行合成(rx_-tap就是一个很好的例子)。我建议阅读,虽然不是swift,但这对解释何时使用主题有很大帮助。是的,我知道主题如何发出事件。非常感谢@tomah。剩下的是学习选择要使用的主题的正确类型:)。
let subject = PublishSubject<String>()

_ = subject.subscribeNext { content in
    print(content)
}
subject.on(.Next("a"))
subject.on(.Next("b"))
var isSearching: Driver<Bool>

isSearching = Driver.just(true)