RxSwift 订阅 ControlEvent
RxSwift Subscribing on ControlEvent
第一个 observable 触发,但第二个不触发。是什么赋予了?我切换了块中的事件,即第二个块中的 print($0) ,反之亦然,然后第一个不起作用,但第二个起作用。 $0 与使 observable observe 的常规字符串有什么区别?
let someObservable = self.inputButton!.rx.tap.subscribe(){
print([=10=])
}
let someObservable1 = self.inputButton!.rx.tap.subscribe(){
print("Hello")
}
在第一个中,您使用的是 [=15=]
,这是传递给您提供的闭包的第一个参数。
let someObservable = self.inputButton!.rx.tap.subscribe(){
print([=10=])
}
在这种情况下,编译器决定您实际上是在调用以下函数,因为它与您正在使用的相匹配,即它需要一个无名参数,而该参数又是一个带有一个参数的闭包,event
:
func subscribe(_ on: @escaping (Event<E>) -> Void)
您可以像这样重写您的第一个代码:
let someObservable = self.inputButton!.rx.tap.subscribe() { event in
print(event)
}
现在,在第二个中,您提供了一个闭包,它不使用任何传递的参数。因此,编译器必须找到另一个在此时语法上有效的函数。事实上,它会为您使用这个:
func subscribe(file: String = #file, line: UInt = #line, function: String = #function, onNext: ((E) -> Void)? = nil, onError: ((Swift.Error) -> Void)? = nil, onCompleted: (() -> Void)? = nil, onDisposed: (() -> Void)? = nil)
这个函数的所有参数都有默认值,你可以忽略它们。最后一个参数 onDispose
是闭包类型,可以用尾随闭包符号来写。这意味着您在此处传递的闭包:
let someObservable1 = self.inputButton!.rx.tap.subscribe(){
print("Hello")
}
将用作您的 dispose
块。
Rule of thumb when using RxSwift:
Be explicit, name your arguments, provide the types of your arguments, in the long run you will spare a lot more time!
第一个 observable 触发,但第二个不触发。是什么赋予了?我切换了块中的事件,即第二个块中的 print($0) ,反之亦然,然后第一个不起作用,但第二个起作用。 $0 与使 observable observe 的常规字符串有什么区别?
let someObservable = self.inputButton!.rx.tap.subscribe(){
print([=10=])
}
let someObservable1 = self.inputButton!.rx.tap.subscribe(){
print("Hello")
}
在第一个中,您使用的是 [=15=]
,这是传递给您提供的闭包的第一个参数。
let someObservable = self.inputButton!.rx.tap.subscribe(){
print([=10=])
}
在这种情况下,编译器决定您实际上是在调用以下函数,因为它与您正在使用的相匹配,即它需要一个无名参数,而该参数又是一个带有一个参数的闭包,event
:
func subscribe(_ on: @escaping (Event<E>) -> Void)
您可以像这样重写您的第一个代码:
let someObservable = self.inputButton!.rx.tap.subscribe() { event in
print(event)
}
现在,在第二个中,您提供了一个闭包,它不使用任何传递的参数。因此,编译器必须找到另一个在此时语法上有效的函数。事实上,它会为您使用这个:
func subscribe(file: String = #file, line: UInt = #line, function: String = #function, onNext: ((E) -> Void)? = nil, onError: ((Swift.Error) -> Void)? = nil, onCompleted: (() -> Void)? = nil, onDisposed: (() -> Void)? = nil)
这个函数的所有参数都有默认值,你可以忽略它们。最后一个参数 onDispose
是闭包类型,可以用尾随闭包符号来写。这意味着您在此处传递的闭包:
let someObservable1 = self.inputButton!.rx.tap.subscribe(){
print("Hello")
}
将用作您的 dispose
块。
Rule of thumb when using RxSwift: Be explicit, name your arguments, provide the types of your arguments, in the long run you will spare a lot more time!