class MyViewController: UIViewController { let tableView = UITableView() let textField = UITextField() let viewModel: MyViewModel let tableViewDelegate: MyTableViewDelegate let tableViewDataSource: MyTableViewDataSource let textFieldDelegate: MyTextFieldDelegate init(viewModel: MyViewModel) { self.viewModel = viewModel tableViewDelegate = MyTableViewDelegate(viewModel: viewModel) tableViewDataSource = MyTableViewDataSource(viewModel: viewModel) textFieldDelegate = MyTextFieldDelegate(viewModel: viewModel) super.init(nibName: nil, bundle: nil) } required init?(coder: NSCoder) { nil } override func viewDidLoad() { super.viewDidLoad() // layout textField.delegate = textFieldDelegate tableView.delegate = tableViewDelegate tableView.dataSource = tableViewDataSource // register cell } }