Переменная viewController
в расширении может быть любой V C, не так ли? Не только 30, которые вы создали. Вы не можете гарантировать, что любой случайный V C будет иметь метод с именем myFunc
, поэтому вы не можете вызывать его в расширении.
Одним из способов решения этой проблемы является создание протокола, который все ваши 30 VC реализуют:
protocol MyFuncable : UIViewController { // please come up with a better name
func myFunc ()
}
Это пример того, как вы реализуете протокол:
class ViewController: UIViewController, MyFuncable {
func myFunc() {
// do whatever you want...
print("myFunc executed")
}
}
Теперь мы гарантируем, что все, что реализует myFuncable
, будет иметь метод с именем myFunc
, поэтому теперь в вашем расширении вы можете проверить, являются ли VC MyFuncable
:
extension UIViewController {
func sampleFunc() {
// here is where the checking happens:
if let viewController = self.navigationController?.visibleViewController as? MyFuncable {
viewController.myFunc()
}
}
}