Аз съм нов за ReactiveCocoa. В моя Swift ViewController, бих искал да наблюдавам / слушам извикването на следния метод в RecipeSwipingViewModel:
func fillSwipingQueueWith(recipeSwipingCards: [RecipeSwipingCardVM]) { ... }
За съжаление не мога да накарам това да работи, въпреки че предполагам, че това е доста често срещан случай на употреба. Опитах няколко варианта на това:
self.viewModel.rac_signalForSelector("fillSwipingQueueWith")...
self.viewModel.rac_signalForSelector("fillSwipingQueueWith:")...
self.viewModel.rac_signalForSelector(Selector("fillSwipingQueueWith:"))...
self.viewModel.rac_signalForSelector("fillSwipingQueueWith:", fromProtocol:NSProtocolFromString("RecipeSwipingViewModel")...
Какво ми липсва? Възможно ли е в действителност да слушате извикването на метода вътре в друг обект (без протокол)? Помощта е високо оценена.
Наздраве, Херардо
Отговори:
1 за отговор № 1rac_signalForSelector
се реализира от функции за изпълнение на Objective-C. За да работи в Swift, трябва да маркирате метода си като dynamic
:
dynamic func fillSwipingQueueWith(recipeSwipingCards: [RecipeSwipingCardVM])
Тогава rac_signalForSelector("fillSwipingQueueWith:")
сигнал трябва да изпрати коректно.
Забележете, това е невъзможно, ако методът е чистФункция Swift (напр. Взема структурен аргумент на Swift) или ако класът на метода не наследява от NSObject. Начинът на Swift за наблюдение на извикване на метод прави сигнала явен. Например:
class ViewModel {
let (callSignal, callObserver) = Signal<[RecipeSwipingCardVM], NoError>.pipe()
func fillSwipingQueueWith(recipeSwipingCards: [RecipeSwipingCardVM]) {
// function implementation
callObserver.sendNext(recipeSwipingCards)
}
}
self.viewModel.callSignal.observeNext { recipeSwipingCards in
print("method call")
}