Я пытаюсь найти лучшее решение для повторяющейся проблемы, которая у меня есть, которую я решал по-разному каждый раз.iOS Swift 3 Проблема с архитектурой
Представьте У меня есть форма в несколько этапов (скажем 2, чтобы начать)
Моя структура кода:
class SuperStepViewController: UIViewController {
//Some generic Stuff
func continueAction(sender : AnyObject?) {
//NOTHING
}
}
class Step1ViewController: SuperStepViewController {
override func continueAction(sender : AnyObject?) {
//DO SOME USEFULL STUFF
}
}
class Step2ViewController: SuperStepViewController {
override func continueAction(sender : AnyObject?) {
//DO SOME USEFULL STUFF
}
}
То, что я хочу, чтобы изменить этот код, чтобы не реализовать функцию continueAction
в SuperViewController
, поскольку он не имеет реализации по умолчанию.
При первом взгляде я подумал, что - хорошая идея. Если я поставлю continueAction
в требуемом протоколе, у меня будет ошибка времени компиляции, и это то, что я хочу.
protocol StepProtocol {
func continueAction()
}
class SuperStepViewController: UIViewController {
//GENERIC
}
class Step1ViewController: SuperStepViewController, StepProtocol {
func continueAction(sender : AnyObject?) {
//DO SOME USEFULL STUFF
}
}
class Step2ViewController: SuperStepViewController, StepProtocol {
func continueAction(sender : AnyObject?) {
//DO SOME USEFULL STUFF
}
}
Но этого недостаточно, я хочу сгенерировать эту компиляцию, как только я подклассию контроллера супервизора. Я знаю Java как нечто вроде абстрактного класса.
class Step3ViewController: SuperStepViewController {
//NO continueAction implementation => No compilation error
}
У кого-нибудь есть идеи?
Возможный дубликат [Силовые дочерние классы для реализации протокола swift] (http://stackoverflow.com/questions/27167685/force-child-classes-to-implement-protocol-swift) – EridB
Я пробовал, что вы код и, похоже, работает так, как вы хотите. Как только я подклассию SuperStepViewController и StepProtocol, мне сказали, что ему нужна функция continueAction и предлагает «internal func continueAction()». Если я только подкласс SuperStepViewController, а не протокол, я, конечно, не получаю ошибок. Разве это не то, чего вы хотите? – Imbue
Нет, я не хочу явно расширять stepProtocol. но я думаю, что это невозможно – CZ54