Как довольно простое прямое решение, вы можете использовать делегирование .Итак, когда «Популярный продукт» View завершит необходимый процесс, вы должны запустить метод делегата, который будет обрабатываться контроллером представления.
Пример:
считать, что в PopularProduct
классе выреализует метод с именем doSomething()
, который необходимо вызвать и завершить свою работу, чтобы скрыть индикатор активности от контроллера представления, и он должен отправить экземпляр Data
в контроллер представления.Вы можете сделать это так:
protocol PopularProductDelegate: class {
func popularProduct(popularProduct: PopularProduct, doSomethingDidPerformWith data: Data)
}
class PopularProduct: UIView {
// ...
weak var delegate: PopularProductDelegate?
func doSomething() {
// consider that there is much work to be done here
// which generates a data instance:
let data = Data(base64Encoded: "...")!
// therefore:
delegate?.popularProduct(popularProduct: self, doSomethingDidPerformWith: data)
}
// ...
}
Следовательно, в ViewController
:
class ViewController: UIViewController {
// ...
var popularProduct: PopularProduct!
override func viewDidLoad() {
super.viewDidLoad()
// show indicator
popularProduct.doSomething()
}
// ...
}
extension ViewController: PopularProductDelegate {
func popularProduct(popularProduct: PopularProduct, doSomethingDidPerformWith data: Data) {
print(data)
// hide indicator
}
}
Кроме того , вы можете проверить myответ для лучшего понимания делегатов.