RxSwift订阅ControlEvent

时间:2017-01-01 04:30:38

标签: rx-swift

第一个可观察到的火,但第二个没有。是什么赋予了?我切换了块中的事件,即在第二个bloack中打印($ 0),反之亦然,然后第一个不起作用,但第二个起作用。什么是关于$ 0与常规字符串,使观察观察?

      let someObservable  = self.inputButton!.rx.tap.subscribe(){
        print($0)
      }

      let someObservable1 = self.inputButton!.rx.tap.subscribe(){
        print("Hello")
      }

1 个答案:

答案 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时,

经验法则:   明确,明确你的论点,提供你的论据类型,从长远来看,你会花费更多的时间!