Разветвление одного контроллера представления на основе дизайна нажатых кнопок - PullRequest
0 голосов
/ 07 июля 2019

В основном я пытаюсь разветвить разные контроллеры на одном контроллере вида на основе нажатых кнопок.

У меня есть 2 кнопки в исходном контроллере вида.Кнопка «A» создает объект класса A, кнопка «B» создает объект класса B. И A, и B являются подклассами класса C. Переходя от начального контроллера представления к следующему, у меня установлен тип объекта C.Что я должен установить следующий тип переменной контроллера представления, чтобы принять A или B, если мне нужно будет получить доступ к определенным атрибутам a или b.

    // A is parent class, B, C and D inherit and have more attributes
    var account: A = A(firstName: "", lastName: "", userName: "", email: "")

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func accountTypeTapped(_ sender: RoundButton) {
        switch sender.tag {
        case 1:
            account = B(firstName: "", lastName: "", userName: "", email: "", companyName: "")
        case 2:
            account = A(firstName: "", lastName: "", userName: "", email: "")
        case 3:
            account = C(firstName: "", lastName: "", userName: "", email: "", companyName: "")
        case 4:
            account = D(firstName: "", lastName: "", userName: "", email: "", currentLocation: CLLocationCoordinate2D(latitude: 0.0, longitude: 0.0))
        default:
            break
        }
    }




override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "toRegisterTwo" {
            print(segue.destination)
            let registerTwo = segue.destination as! RegisterTwoController


// What type should registerTwo.account be? If I set it to class A I cant access class B specific attributes, same for other classes. 
            registerTwo.account = account
            print(account)
        }
    }





==========================================================


// In a different controller
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "toAddEmployeesAndConsultants" {
            let recievingVC = segue.destination as! AddEmployeesAndTConsultantsController
            recievingVC.account = account
        }

        if segue.identifier == "toAddEmployees" {
            let recievingVC = segue.destination as! AddEmployeesViewController
            recievingVC.account = D(firstName: account.firstName, lastName: account.lastName!, userName: account.userName, email: account.email, companyName: account.companyName)
        }
    }

Это хороший способ?Есть ли способ лучше?Спасибо!

...