2017-10-06 2 views

Antwort

0

Ich habe Ihren Code geändert, Sie können es verwenden, es wird Ihnen das Ergebnis geben, was Sie wollen.

import UIKit 

class ViewController: UIViewController { 
@IBOutlet var c: UITextField! 
@IBOutlet var a: UITextField! 
@IBOutlet var b: UITextField! 
var contacts: [Person] = [] 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 


} 
@IBAction func press(_ sender: Any) { 
    contacts.append(Person(name: a.text!, surname: b.text! , phone: Int(c.text!)!)) 
    print(self.contacts.description) 
} 

struct Person { 
    var name: String 
    var surname: String 
    var phone: Int 

}} 

Ich habe gerade eine Änderung in Druckaussage gemacht. Da Ihr Kontaktarray in Ihnen den Controller selbst anzeigt, können Sie ihn direkt verwenden und die Funktionsbeschreibung zum Drucken von Aktualisierungswerten von Kontakten verwenden.

+0

Wenn der Benutzer eine beliebige Ziffer eingibt oder einen Text einfügt, der keine Ganzzahlen enthält, stürzt die App ab. Außerdem ist es sehr üblich, Telefonnummern + und 0 als Präfix hinzuzufügen. OP sollte es als String nicht Ganzzahlen speichern. –

+0

@LeoDabus Auch zu Ihrem Kommentar hinzufügen, auch wenn die Telefonnummer nur Ziffern enthält, sollte es immer noch nicht ein "Int" sein. Bei einer Telefonnummer wird keine Berechnung durchgeführt. Eine Telefonnummer ist nur ein Etikett. – rmaddy

0

print(ViewController.Person) falsch ist

Bitte verwenden:

print(contacts.last) 
2

Sie versuchen die tatsächliche struct von Person zu drucken. Sie möchten eine bestimmte Instanz drucken.

können Sie das gesamte Array drucken, wie:

@IBAction func press(_ sender: Any) { 
    let person = Person(name: a.text!, surname: b.text! , phone: Int(c.text!)!) 
    print(person) 
    contacts.append(person) 
} 

Aber um den Druck nützlich:

print("contacts: \(contacts)") 

Wenn Sie das eine Instanz ausdrucken möchten, würde ich Ihren Code ein wenig vorschlagen Aufspalten Sie sollten die description-Eigenschaft zu Ihrer Struktur hinzufügen und Ihre Struktur an CustomStringConvertible anpassen.

struct Person: CustomStringConvertible { 
    var name: String 
    var surname: String 
    var phone: Int 

    var description: String { 
     return "Person name: \(name), surname: \(surname), phone: \(phone)" 
    } 
} 

Sie sollten auch lernen, sicher mit Optionals umzugehen. Der Operator ! bedeutet "Absturz wenn nicht Null". Ihr Code stürzt ab, wenn der Benutzer "Hello" in das Telefonfeld eingibt.

@IBAction func press(_ sender: Any) { 
    if let name = a.text, let surname = b.text, let phoneStr = c.text, let phone = Int(phoneStr) { 
     let person = Person(name: name, surname: surname, phone: phone) 
     print(person) 
     contacts.append(person) 
    } 
} 

Und auch, dass eine Telefonnummer kein numerischer Wert ist. Verwenden Sie String, nicht Int, um Telefonnummern zu speichern.