2017-10-15 6 views
0

2VIEWCONTROLLERからstruct person内のlet nameステートメントをcalしようとしています。私は別のビューコントローラから構造体エントリを呼び出すことができると思ったが、わからない。私が持っている主な問題は、構造物がただ1つの入り口を取ることができるということです。今すぐコードを購入するだけで入札を移転することができます。どのようにして複数の作品を保管することができますか?複数のエントリを保持する異なるビューコントローラからコール構造体を呼び出す(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私は両方のviewcontrollerがお互いに独立して動作するようにしようとしています。 –

答えて

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つのエントリしか保持できないという問題があります。保存されるたびに、印刷物は消去されます。 –

関連する問題