Общие функции в Swift

Jeff спросил: 13 июня 2018 в 09:41 в: swift

Я искал, но большинство найденных ответов более сложны, чем я могу понять. Если есть учебник, я бы оценил ссылку, но вот мой вопрос:

У меня есть несколько функций, которые имеют одинаковую механику и форму, но называют разные классы. Сейчас я повторяю много одного и того же кода, и я думаю, что есть более короткий способ сделать это. Вот пример:

func nextQuestion() {    switch analysisProgress {
    case 7:        if questionProgress < ownershipQuestionList.list.count {
            questionLabel.fadeTransition(0.4)
            questionLabel.text = ownershipQuestionList.list[questionProgress].question
            definitionText.text = ownershipQuestionList.list[questionProgress].definitions
            } else {
                self.performSegue(withIdentifier: "goToNarrativeVC", sender: nil)
            }    case 9:        if questionProgress < discomfortQuestionList.list.count {
            questionLabel.fadeTransition(0.4)
            questionLabel.text = discomfortQuestionList.list[questionProgress].question
            definitionText.text = discomfortQuestionList.list[questionProgress].definitions
            } else {
                self.performSegue(withIdentifier: "goToNarrativeVC", sender: nil)
            }    case 10:        if questionProgress < resourceQuestionList.list.count {
            questionLabel.fadeTransition(0.4)
            questionLabel.text = resourceQuestionList.list[questionProgress].question
            definitionText.text = resourceQuestionList.list[questionProgress].definitions
        } else {
            self.performSegue(withIdentifier: "goToNarrativeVC", sender: nil)
        }    default:
        ()
    }

Каков наилучший способ справиться с этими ситуациями?

1 ответ

Есть решение
matt ответил: 13 июня 2018 в 09:47

Это, похоже, не имеет ничего общего с дженериками. Кажется, это всего лишь вопрос рефакторинга для принудительного использования DRY (не повторяйте себя).

  • Если идея состоит в том, что ownershipQuestionList и discomfortQuestionList и resourceQuestionList все должны иметь некоторые общие свойства, а затем сделать их одинаковыми, или быть подклассами одного класса, или быть совместимыми с общим протоколом.

  • Если они уже это делают, просто переведите общий код в локальную функцию и вызовите его каждый раз.

Jeff ответил: 14 июня 2018 в 07:17
Спасибо вам за помощь. Мэтт! Да, я думаю, вы правы в своем первом предположении, что речь идет не о функции, а о том, как я структурировал классы ...

Дополнительное видео по вопросу: Общие функции в Swift

Swift 3 с нуля: Xcode урок 9 - что такое Function |функции (для новичков)

Swift 4 Programming #11 - Functions

Swift 3 с нуля: Xcode урок 12 - что такое Class | Struct (для новичков)