Играя с этим, я обнаружил, что вы можете получить синтаксис вроде:
viewModel.title
.drive(onNext: weakCapture(self, method: YourViewController.updateTitle))
.disposed(by: disposeBag)
Лекарство хуже болезни, но это немного забавно. Вот определение вспомогательного метода:
func weakCapture<T: AnyObject, A1>(
_ target: T,
method: @escaping (T) -> (A1) -> Void
) -> (A1) -> Void {
return { [weak target] arg in
guard let strongTarget = target else { return }
method(strongTarget)(arg)
}
}
Вот пример использования:
var c: C? = C()
let weaklyCapturedFooMethod = weakCapture(c!, method: C.foo)
weaklyCapturedFooMethod(123) // Runs foo(i: 123)
print(c as Any)
c = nil
weaklyCapturedFooMethod(123) // does nothing
Это не очень приятно. : P
Я бы порекомендовал просто использовать: { [weak self] self?.updateTitle($0) }