打印附加结构(swift4)

时间:2017-10-06 22:31:36

标签: ios swift struct printing append

我有三个用于将数据附加到结构中的文本。如何打印我附加的内容?现在我收到一条错误消息。

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

3 个答案:

答案 0 :(得分:2)

您正在尝试打印struct的实际Person。您想要打印特定的实例。

您可以将整个数组打印为:

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

您还应学会安全地处理选项。如果不是nil" !运算符意味着"崩溃。如果用户键入" 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来存储电话号码。

答案 1 :(得分:0)

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

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

}}

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

答案 2 :(得分:0)

print(ViewController.Person)错了

请使用:

print(contacts.last)