2016-11-07 4 views
0

Я пытаюсь найти лучшее решение для повторяющейся проблемы, которая у меня есть, которую я решал по-разному каждый раз.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 

} 

У кого-нибудь есть идеи?

+2

Возможный дубликат [Силовые дочерние классы для реализации протокола swift] (http://stackoverflow.com/questions/27167685/force-child-classes-to-implement-protocol-swift) – EridB

+0

Я пробовал, что вы код и, похоже, работает так, как вы хотите. Как только я подклассию SuperStepViewController и StepProtocol, мне сказали, что ему нужна функция continueAction и предлагает «internal func continueAction()». Если я только подкласс SuperStepViewController, а не протокол, я, конечно, не получаю ошибок. Разве это не то, чего вы хотите? – Imbue

+0

Нет, я не хочу явно расширять stepProtocol. но я думаю, что это невозможно – CZ54

ответ

0

№ Это невозможно в Swift. Свифт не поддерживает такую ​​деятельность.

Смежные вопросы