/ / Как да наблюдаваме извикването на метод в ViewModel? - реактивно-какао

Как да наблюдаваме извикването на метода в ViewModel? - реактивно-какао

Аз съм нов за 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 за отговор № 1

rac_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")
}