2017-10-15 71 views
0

我想调用twoVIEWCONTROLLER结构人内部的名称声明。我以为我可以从另一个视图控制器调用结构条目,但我不确定。我所面临的主要问题是结构只能进入一次。现在的代码是可以转让结构购买只有一个入口被保存。我如何获得结构来存储多个条目。从不同的视图控制器调用结构保存多个条目(swift4)

的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

您需要访问的人的实例来访问该实例的'name'属性。 – dasdom

+0

你没有说如果'ViewController'呈现'twoViewController'或都是完全独立的... – Ladislav

+0

@Ladislav我试图做到这两个viewcontrollers行事互相独立。 –

回答

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 
      } 
     } 
    } 
} 

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

这有效,但问题是它一次只能保存1个条目。每次保存时,打印文件都被删除。 –

相关问题