I also searched for this answer, and I found this,
Passing a closure from the user interface layer (UIL) to the business logic layer (BLL) will result in a “Separate Problem” (SOC) break. The data you are preparing is in the BLL, so essentially you would say, "Hey, BLL, follow this UIL logic for me." This is SOC. (More info here https://en.wikipedia.org/wiki/Separation_of_concerns .)
BLL should only communicate with UIL through delegate notifications. So the BLL essentially says: "Hi UIL, I have finished executing my logic and here are some data arguments that you can use to control the user interface controls as you need."
Therefore, the UIL should never ask the BLL to execute the user interface control logic for it. Should only ask the BLL to notify him.
, .
MVVM iOS