第一个可观察到的火,但第二个没有。是什么赋予了?我切换了块中的事件,即在第二个bloack中打印($ 0),反之亦然,然后第一个不起作用,但第二个起作用。什么是关于$ 0与常规字符串,使观察观察?
let someObservable = self.inputButton!.rx.tap.subscribe(){
print($0)
}
let someObservable1 = self.inputButton!.rx.tap.subscribe(){
print("Hello")
}
答案 0 :(得分:4)
在第一个中,您正在使用$0
,这是传递给您已提供的闭包的第一个参数。
let someObservable = self.inputButton!.rx.tap.subscribe(){
print($0)
}
在这种情况下,编译器决定您实际调用以下函数,因为它匹配您正在使用的函数,即它期望一个无名参数,而后者又是一个带有一个参数的闭包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
阻止。
使用RxSwift时,经验法则: 明确,明确你的论点,提供你的论据类型,从长远来看,你会花费更多的时间!