In dem ersten, verwenden Sie die $0
, die das erste Argument, das zur Schließung geführt wird, die Sie zur Verfügung gestellt haben.
let someObservable = self.inputButton!.rx.tap.subscribe(){
print($0)
}
In diesem Fall entscheidet der Compiler, dass Sie tatsächlich den Aufruf der folgenden Funktion sind, weil es übereinstimmt, was Sie verwenden, dh es ist ein namenlos Argument erwartet, was wiederum einen Verschluss mit einem Argument ist, das event
:
func subscribe(_ on: @escaping (Event<E>) -> Void)
Sie können Ihren ersten Code wie folgt umschreiben:
let someObservable = self.inputButton!.rx.tap.subscribe() { event in
print(event)
}
Nun, sie einen Verschluss in dem zweiten bereitstellen, die das tut Es werden keine übergebenen Argumente verwendet. Der Compiler muss also eine andere Funktion finden, die zu diesem Zeitpunkt syntaktisch gültig ist. Wie in der Tat wird es dieses für Sie verwenden:
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)
All dies Argumente der Funktion Standardwerte haben, und Sie können alle von ihnen ignorieren. Das letzte Argument onDispose
ist vom Schließungstyp und kann mit der abschließenden Schließnotation geschrieben werden. Das bedeutet, dass die Schließung, die Sie hier passieren:
let someObservable1 = self.inputButton!.rx.tap.subscribe(){
print("Hello")
}
wird als Ihr dispose
Block verwendet werden.
Daumenregel wenn RxSwift mit: explizit sein, Ihre Argumente nennen, die Art Ihrer Argumente, auf lange Sicht bieten wird Ihnen viel mehr Zeit ersparen!