Если я правильно понял вопрос, вы хотите избежать повторения «кода, связанного с картой» в другом viewcontroller.
В таком случае, почему бы не использовать подход «источника данных», создайте дополнительный класс ViewControllerMapInjector
или любое другое имя, и в инициализации передайте vc и выполните любой метод, который вы предпочитаете
class ViewControllerMapInjector: MKMapViewDelegate {
private let vc: UIViewController
init(vc: UIViewController) {
self.vc = vc
}
func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
NSLog("test") // or use the vc as you want.
}
}
, затем в viewController setup()
просто
self.mapView.delegate = ViewControllerMapInjector(vc: self)
В конце концов вам может понадобиться применить дополнительные шаблоны к контроллеру представления, чтобы позволить дополнительным методам быть видимыми провайдеру при необходимости (в конце самое простое решение состоит в том, чтобы полностью заполнить OO и создать подкласс ViewController). Это немного запутанно, но альтернатива, о которой я могу подумать, не намного проще.