【问题标题】:Print appended struct (swift4)打印附加结构(swift 4)
【发布时间】:2018-03-18 19:03:31
【问题描述】:

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

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

【问题讨论】:

    标签: ios swift struct printing append


    【解决方案1】:

    您正在尝试打印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)"
        }
    }
    

    您还应该学会安全地处理选项。 ! 运算符的意思是“如果不是 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 来存储电话号码。

    【讨论】:

      【解决方案2】:

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

      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 作为前缀也很常见。 OP 应该将其存储为字符串而不是整数。
      • @LeoDabus 也添加到您的评论中,即使电话号码只包含数字,它也不应该是Int。没有对电话号码进行任何数学运算。电话号码只是一个标签。
      【解决方案3】:

      print(ViewController.Person) 错了

      请使用:

      print(contacts.last)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-24
        • 1970-01-01
        • 2014-06-05
        • 1970-01-01
        • 2018-08-24
        • 1970-01-01
        • 1970-01-01
        • 2021-07-12
        相关资源
        最近更新 更多