2017-08-09 111 views
0

我試圖將創建的用戶實例傳遞到另一個視圖控制器。問題是傳遞的用戶取決於用戶的類型被選中。我的意思是我創建了許多主類User的子類。例如:Guest,VIP,Child等,當在第一頁上創建一個實例時,它就是創建該用戶的子類。如果沒有將第二個視圖控制器用戶屬性設置爲「鍵入用戶」,我無法將我的用戶傳遞給第二個視圖控制器。問題是類型用戶不具有子類在第二頁中具有的所有屬性我無法訪問子類可能具有的所有屬性。這就是例子,我怎麼現在有它設置:將不同子類的實例傳遞給Swift 3中的另一個ViewController

首先屏幕/視圖控制器

var entrantData: People? 
var entrantSelected: EntrantType = .none 

@IBAction func generatePass(_ sender: UIButton) { 
    do{ 
switch entrantSelected { 
     case .freechildguest: entrantData = try Child(dateOfBirth: "\(dobTextField.text!)") 
     case .classicguest: entrantData = ClassicGuest() 
     case .maintenance: entrantData = try Maintenance(NameAddress(firstName: firstNameTextField.text, lastName: lastNameTextField.text, streetAddress: streetAddressTextField.text, city: cityTextField.text, state: stateTextField.text, zipCode: zipCodeTextField.text, entrantType: .maintenance)) 
     default: break 
     } 
} catch let error { 
     showAlert(title: "Error", message: "\(error)") 
} 

} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let destViewController = segue.destination as? TicketViewController { 
     destViewController.dataFromForm = entrantData 
    } 
} 

第二個屏幕/視圖控制器

class TicketViewController: UIViewController { 
var dataFromForm: People? 

所以在第二視圖控制器我現在有dataFromForm中的用戶數據,但我希望它位於其子類中,以便我可以獲取僅在其子類中劃分的屬性。例如。維護用戶具有兒童和classicGuest不具備的firstname屬性。

我想我可以創建子類在User超類中使用的所有屬性,但是我覺得這樣做會破壞創建具有其獨特屬性的子類的要點。要解決這個問題

回答

0

一種方法是保持People類型的屬性上TicketViewController和試圖訪問只有在一定的子類有一個屬性時,嘗試有條件下來鑄造People實例適當的子類。

這裏是你如何能做到這一點的基本示例:

if let vip = dataFromForm as? VIP { 
    //access VIP properties 
} else if let guest = dataFromForm as? Guest { 
    //access guest properties 
} 
+0

當然是這樣,如果讓設置客人有傳票名稱默認標籤文本,但爲維護型我能得到的標籤,我可以用使用該用戶的名字。非常感謝大衛! –

+0

不用擔心,歡迎來到SO!如果您發現我的答案有幫助,請考慮接受它。 –

相關問題