2017-06-30 47 views
0

我想從我的初始視圖控制器發送多個對象到我的Username VC。這是來自我的控制器的segue代碼:當我添加代碼發送第二個對象termreport時,問題就出現了。如果我刪除termsM和作業,它通常會發送給學生,但我還需要發送termReport對象。我將如何解決這個問題?Swift發送多個對象到視圖控制器

ViewControler

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    guard let students = sender as AnyObject as? [Student] 
    else { return } 
    guard let termsM = sender as AnyObject as? [TermReport] //How would I send both objects? 
    else { return } 
    if let secondVC = segue.destination as? UsernameVC { 
     secondVC.students = students 
     secondVC.userWebView = webView 
     secondVC.terms = termsM // not sending 
    } 
    let gradeResponse = try Parser(innerHTML) 
    self.performSegue(withIdentifier: "ShowStudents", sender: gradeResponse.students) 
    self.performSegue(withIdentifier: "ShowStudents", sender: gradeResponse.termReports) //how would I send both variables? 

UsernameVC

var terms: [TermReport]! 
override func viewDidLoad() { 
    print("TERM \(terms[0].grades[3])")//returns found nil optional ERROR 
} 

回答

2

你必須包括所有想要使用SEGUE發送到另一個ViewController成一個單一對象的變量(其也可以是一個集合)。您可以創建一個具有[Student][TermReport]類型屬性的自定義類/結構,也可以將它們放入本機集合(Tuple或Dictionary)中。

創建自定義的結構:

struct TermData { 
    var students = [Student]() 
    var termReports = [TermReport]() 
} 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    guard let segueData = sender as? TermData 
    else { return } 
    if let secondVC = segue.destination as? UsernameVC { 
     secondVC.students = segueData.students 
     secondVC.userWebView = webView 
     secondVC.terms = segueData.termReports 
     } 
}  

let gradeResponse = try Parser(innerHTML) 
let termData = TermData(students: gradeResponse.students, termReports: gradeResponse.termReports) 
self.performSegue(withIdentifier: "ShowStudents", sender: termData) 
+0

非常酷的方式來做到這一點!工作得很好。謝謝。有一件事,當你分配let termData = TermData()時,你必須用參數實例化它,然後刪除以下兩行。除此之外,它效果很好。 – yzet00

+0

很高興你覺得它有用。是的,你說得對,我應該宣佈'termData'是可變的,但在這種情況下你是對的,它可以立即用值初始化,所以這是一個更清潔的解決方案。 –

相關問題