В моем приложении есть протокол для контроллеров подробных представлений, указав, что они должны иметь свойство viewModel
:
protocol DetailViewController: class {
var viewModel: ViewModel? {get set}
}
У меня также есть несколько разных классов, которые реализуют протокол:
class FormViewController: UITableViewController, DetailViewController {
// ...
}
class MapViewController: UIViewController, DetailViewController {
// ...
}
Моему контроллеру главного представления требуется свойство, которое может быть установлено для любого подкласса UIViewController
, который реализует протокол DetailViewController
.
К сожалению, я не могу найти документацию о том, как это сделать. В Objective-C было бы тривиально:
@property (strong, nonatomic) UIViewController<DetailViewController>;
Похоже, что в Swift нет синтаксиса для этого. Самое близкое, что я пришел, - объявить родовое определение моего класса:
class MasterViewController<T where T:UIViewController, T:DetailViewController>: UITableViewController {
var detailViewController: T?
// ...
}
Но потом я получаю сообщение об ошибке: "Класс" MasterViewController "не реализует своих членов, связанных с суперклассом"
Кажется, что это должно быть так же легко сделать в Swift, как и в Objective-C, но я не могу найти ничего, что подсказывает, как я могу это сделать.