打印附加结构(swift4)

问题描述:

我有三个textifleds,我正在使用将数据追加到一个结构。我怎样才能打印我附加的内容?现在我收到一条错误消息。打印附加结构(swift4)

import UIKit 

class ViewController: UIViewController { 
    @IBOutlet var c: UITextField! 
    @IBOutlet var a: UITextField! 
    @IBOutlet var b: UITextField! 
    var contacts: [Person] = [] 

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

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

我修改了你的代码,你可以使用它,它会给你结果你想要的。

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 

}} 

我刚刚在打印语句中做了一处更改。由于您的联系人数组在您视图控制器本身,因此您可以直接使用它自己并使用功能描述打印联系人的更新值。

+0

如果用户键入任何非数字或粘贴包含非整数的文本,则应用程序将崩溃。另外,将+和0作为前缀添加到电话号码中是非常常见的。 OP应该将其存储为字符串不整数。 –

+0

@LeoDabus即使电话号码只包含数字,也会添加到您的评论中,但它不应该是“Int”。没有数字是通过电话号码完成的。电话号码只是一个标签。 – rmaddy

print(ViewController.Person)是错误的

请使用:

print(contacts.last) 

你要打印的Person实际struct。你想打印一个特定的实例。

您可以打印整个数组:

print("contacts: \(contacts)") 

如果你要打印的一个实例,我建议拆分您的代码一点:

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

但是,为了使印刷有用您应该将description属性添加到您的结构中并使您的结构符合CustomStringConvertible

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

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

您还应该学会安全地处理optionals。 !运算符表示“如果不是零,则会崩溃”。如果用户在电话字段中输入“Hello”,您的代码将崩溃。

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

并且还认为电话号码不是数字值。使用String而不是Int来存储电话号码。