В основном я пытаюсь разветвить разные контроллеры на одном контроллере вида на основе нажатых кнопок.
У меня есть 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)
}
}
Это хороший способ?Есть ли способ лучше?Спасибо!