2017-10-15 1 views
0

Ich versuche, die Let-Namen-Anweisung in struct Person von TwoVIEWCONTROLLER cal. Ich dachte, ich kann nur eine Struktur Einträge von einem anderen View-Controller aufrufen, aber ich bin mir nicht sicher. Das Hauptproblem, das ich habe, ist, dass die Struktur nur einen Eintrag nehmen kann. DER CODE KANN JETZT DEN STRUKTURKAUF ÜBERTRAGEN, NUR EINEN EINTRAG WIRD GESPEICHERT. WIE KANN ICH DIE STRUKTUR ERHALTEN, UM MEHRERE EINTRÄGE ZU SPEICHERN?Aufruf der Struktur aus verschiedenen Sicht-Controller, der mehrere Einträge (swift4) enthält

Viewcontroller

 import UIKit 
class ViewController: UIViewController { 
@IBOutlet var a: UITextField! 
    @IBOutlet var label: UILabel! 
    var contacts = [Person]() 

    @IBAction func save(_ sender: Any) { 
     let newPerson = Person(name: a.text!) 
     contacts.append(newPerson) 
     contacts.sort { $0.name < $1.name } 
     self.selectedPerson = newPerson 
    } 

    var selectedPerson:Person? 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if let vc = segue.destination as? twoViewController { 
      if self.selectedPerson != nil { 
       vc.person = selectedPerson 
      }}} 
     } 
          struct Person: CustomStringConvertible { 
           let name: String 

           var description: String { 
            return name 
           }} 

twoVIEWCONTROLLER

import UIKit 
class twoViewController: UIViewController { 
    @IBOutlet var l: UILabel! 

    var person:Person? 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     if let p = self.person { 
      l.text = p.name 
     }}} 
+0

Sie benötigen Zugriff auf eine Instanz von Person, die 'name' Eigenschaft dieser Instanz zuzugreifen. – dasdom

+0

Sie haben nicht gesagt, ob 'ViewController'' twoViewController' präsentiert oder beide völlig unabhängig sind ... – Ladislav

+0

@Ladislav Ich versuche das mit beiden Viewcontrollern zu machen, die unabhängig voneinander arbeiten. –

Antwort

0
struct Contacts { 
    var all = [Person]() 
} 

struct Person: CustomStringConvertible { 
    let name: String 

    var description: String { 
     return name 
    } 
} 

class ViewController: UIViewController { 
    @IBOutlet var a: UITextField! 
    @IBOutlet var label: UILabel! 
    var contacts = Contacts() 

    @IBAction func save(_ sender: Any) { 
     let newPerson = Person(name: a.text!) 
     contacts.all.append(newPerson) 
     contacts.all.sort { $0.name < $1.name } 
     self.selectedPerson = newPerson 
    } 

    var selectedPerson:Person? 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if let vc = segue.destination as? twoViewController { 
      if self.selectedPerson != nil { 
       vc.person = selectedPerson 
       vc.contacts = contacts 
      } 
     } 
    } 
} 

Zweite

class twoViewController: UIViewController { 
    @IBOutlet var l: UILabel! 

    var contacts: Contacts? 
    var person:Person? 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     if let p = self.person { 
      l.text = p.name 
     } 
    } 
} 
+0

Dies funktioniert, aber das Problem ist, es kann nur 1 Eintrag auf einmal halten. Jedes Mal, wenn es gespeichert wird, wird der Druck gelöscht. –

Verwandte Themen