iOS приложение, которое подписывает людей на улице-лиги в своем районе


Я знаю, что есть некоторые повторяющиеся фрагменты кода в здесь, поэтому мне нужен анализ кода. Смысл приложения прост, пользователь открывает его, нажимает кнопку "Начать", они выбирают их Лиги - мужской, женской или смешанной, а затем они выбирают свой уровень мастерства.

Главной проблемой я вижу это то, что кнопку функции в ВКС лиги все же. Я пробовал добавлять его в BorderedButton.Свифт файл, но он требует, чтобы я добавить переменную - плеер, который я понял, был лишним тот факт, что уже в каждом контроллере посмотреть Лиги.

Основной Вид Контроллера:

class WelcomeVC: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()


    }

    @IBAction func unWindFromSkillVC(unwindSegue: UIStoryboardSegue) {

    }

}

Пользователь приезжает сюда после того, как они выберите "продолжить" на экране приветствия. Затем они выбирают какой лиге они хотят присоединиться. Это получает переходами готов к следующему-представление-контроллер также
Контроллер Смотреть Лига:

import UIKit

class LeagueVC: UIViewController {


    var player: Player!

    override func viewDidLoad() {
        super.viewDidLoad()

        player = Player()
    }


    @IBAction func onMensTapped(_ sender: Any) {
        selectLeague(leagueType: "mens")
        performSegue(withIdentifier: "mensVCSegue", sender: self)

    }

    @IBAction func onWomensTapped(_ sender: Any) {
        selectLeague(leagueType: "womens")
        performSegue(withIdentifier: "womensVCSegue", sender: self)
    }

    @IBAction func onCoedTapped(_ sender: Any) {
        selectLeague(leagueType: "coed")
        performSegue(withIdentifier: "coedVCSegue", sender: self)
    }


    func selectLeague(leagueType: String) {
        player.desiredLeague = leagueType

    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let mensVC = segue.destination as? MensVC {
            mensVC.player = player
        } else if let womensVC = segue.destination as? WomensVC {
            womensVC.player = player
        } else if let coedVC = segue.destination as? CoedVC {
            coedVC.player = player
        }
    }
}

Пользователь приезжает сюда после того, как они выберите "студенточка" лиги, то они выбирают свой уровень мастерства.
Студенточка-представление-контроллер (управляет студенточка-представление-контроллер):

class CoedVC: UIViewController {

    var player: Player!


    override func viewDidLoad() {
        super.viewDidLoad()

        print(player.desiredLeague)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func beginnerBtnPressed(_ sender: Any) {
        selectSkillLevel(skillLevel: "beginner")
    }

    @IBAction func ballerBtnPressed(_ sender: Any) {
       selectSkillLevel(skillLevel: "baller")
    }


    func selectSkillLevel(skillLevel: String) {
        player.selectedSkillLevel = skillLevel
        print(skillLevel)
    }
}

Пользователь приезжает сюда после того, как они выберите "женской" Лиги, то они выбирают свой уровень мастерства.
Контроллер женские вид:

class WomensVC: UIViewController {

    var player: Player!

    override func viewDidLoad() {
        super.viewDidLoad()

        print(player.desiredLeague)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func beginnerBtnPressed(_ sender: Any) {
        selectSkillLevel(skillLevel: "beginner")
    }

    @IBAction func ballerBtnPressed(_ sender: Any) {
        selectSkillLevel(skillLevel: "baller")
    }


    func selectSkillLevel(skillLevel: String) {
        player.selectedSkillLevel = skillLevel
        print(skillLevel)
    }

}

Пользователь приезжает сюда после того, как они выберите "мужской" лиге, то они выбирают свой уровень мастерства.
Регулятором мужской вид:

import UIKit

class MensVC: UIViewController {

    var player: Player!

    override func viewDidLoad() {
        super.viewDidLoad()

        print(player.desiredLeague)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func beginnerBtnPressed(_ sender: Any) {
        selectSkillLevel(skillLevel: "beginner")
    }

    @IBAction func ballerBtnPressed(_ sender: Any) {
        selectSkillLevel(skillLevel: "baller")
    }

    func selectSkillLevel(skillLevel: String) {
        player.selectedSkillLevel = skillLevel
        print(skillLevel)
    }

}

Вот GitHub ссылке: https://github.com/andrewlundy/app-swoosh



130
3
задан 26 января 2018 в 07:01 Источник Поделиться
Комментарии
1 ответ

Первое, что я заметил, что у вас есть три контроллера представления
классы (MensVC, WomensVC, CoedVC) с идентичным кодом.

Вы можете уменьшить, что в один вид контроллера класса (возможно SkillsVC ?) что пользовательский класс для всех три вида контроллеров.

В prepare(for:segue:) способ в LeagueVC затем упрощает также:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let skillsVC = segue.destination as! SkillsVC
skillsVC.player = player
}

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

Можно даже заменить три вида контроллеров на один в
раскадровку. Единственная разница между ними-фон
изображения, и может быть загружен (например, в viewDidLoad) в зависимости от
выбранные Лиги.

Что касается кнопки продублированы код действия: я нахожу его приемлемым
для трех кнопок. В качестве альтернативы можно добавить розетки подключения к
каждая кнопка в LeagueVC и соединить все кнопки в том же
метод действия:

@IBAction func leagueButtonTapped(_ sender: UIButton) {
switch sender {
case mensButton:
selectLeague(leagueType: "mens")
performSegue(withIdentifier: "mensVCSegue", sender: self)
case womensButton:
selectLeague(leagueType: "womens")
performSegue(withIdentifier: "womensVCSegue", sender: self)
case coedButton:
selectLeague(leagueType: "coed")
performSegue(withIdentifier: "coedVCSegue", sender: self)
default:
fatalError()
}
}

Другим вариантом было бы прикрепить непосредственно переходит непосредственно к кнопкам
и снять кнопку методам действий. Тогда логика должна быть поставлена
в prepare(for:segue:)в зависимости от подводки идентификатор.

4
ответ дан 26 января 2018 в 08:01 Источник Поделиться