打印附加结构(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
}}
我刚刚在打印语句中做了一处更改。由于您的联系人数组在您视图控制器本身,因此您可以直接使用它自己并使用功能描述打印联系人的更新值。
答
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
来存储电话号码。
如果用户键入任何非数字或粘贴包含非整数的文本,则应用程序将崩溃。另外,将+和0作为前缀添加到电话号码中是非常常见的。 OP应该将其存储为字符串不整数。 –
@LeoDabus即使电话号码只包含数字,也会添加到您的评论中,但它不应该是“Int”。没有数字是通过电话号码完成的。电话号码只是一个标签。 – rmaddy