我有三个用于将数据附加到结构中的文本。如何打印我附加的内容?现在我收到一条错误消息。
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
}
}
答案 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)