Swift: возможно ли использовать общий и раскадровку для UIViewController

скажем, у меня есть подкласс UIViewController:

class InformationServiceMenuVC <T : InformationServiceItemProtocol>: UITableViewController {

}

Обычно я могу создать экземпляр контроллера вида, вызвав что-то вроде:

let vc = InformationServiceSideMenuVC<InformationServiceMenuItem>()

но как передать необходимый общий тип при использовании раскадровки?

Ответ 1

Создайте конкретный класс, который наследуется от общего класса:

class SpecificInformationServiceMenuVC : InformationServiceMenuVC<Specific> {}

Затем вы можете использовать определенный подкласс в качестве типа вашего класса в раскадровке.

Это может даже работать только для создания типов:

typealias SpecificInformationServiceMenuVC = InformationServiceMenuVC<Specific>

Ответ 2

В Swift 3.0.1 я смог реорганизовать из этого:

class TagPickerViewController: BaseViewController, HasAppController {
}
extension TagPickerViewController: UITableViewDelegate {
}

в

class TagPickerViewControllerGeneric<TagViewModelClass: TagPickerViewModel>
    : BaseViewController {
}
class TagPickerViewController: TagPickerViewControllerGeneric<TagPickerViewModel>, 
    HasAppController, UITableViewDelegate {
}

Сохраняя TagPickerViewController в раскадровке /xib. Надеюсь, что это поможет.