2017-01-01 61 views
0

第一次可觀察到的火災,但第二次沒有。是什麼賦予了?我將塊中的事件(即打印($ 0))切換到第二塊,反之亦然,然後第一塊不起作用,但第二塊起作用。與$ 0相比,這是一個可觀察觀察的常規字符串是什麼?RxSwift訂閱ControlEvent

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

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

回答

2

在第一個中,您使用的是$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時: 要明確,命名你的論點,提供各類你的論點,從長遠來看,你會騰出更多的時間!