【问题标题】:Issue printing UITextField Value问题打印 UITextField 值
【发布时间】:2017-11-11 21:22:55
【问题描述】:

我的故事板上有一个UITextField,我的控制器中有一个outlet

@IBOutlet weak var textField: UITextField!

我已经创建了一个动作(UITextFieldEditing Changed)。现在,我正在尝试在值更改时打印出该值,但它给了我以下错误:

字符串插值产生一个可选值的调试描述

操作代码:

@IBAction func editingChanged(_ sender: UITextField) {
    print("The value is : \(textField.text)")
}

有点困惑为什么我会遇到这个问题。

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    文本字段的text 属性是可选的,您必须解开可选的包装。

    顺便说一句,你不需要插座,sender参数代表文本字段

    @IBAction func editingChanged(_ sender: UITextField) {
        print("The value is : \(sender.text!)")
    }
    

    你甚至不需要String Interpolation,你也可以写

    print("The value is : ", sender.text!)
    

    【讨论】:

    • UITextField text 永远不会返回 nil。它被记录为返回""。即使你将它设置为nil,然后读取值,你也会得到""。在这种情况下,强制展开非常安全且简单得多。
    • 我无法想象 Apple 提供了这种不一致。谢谢,答案已更新。
    • 你指的是什么不一致?
    • 将属性声明为可选的不一致,但实际上它是非可选的
    • 这可能是原始 Objective-C API 的保留。如果 API 是从头开始设计的,只使用 Swift,它可能不是可选的。
    【解决方案2】:

    你应该强制解开文本字段的值

    print("The value is : \(textField.text!)")
    

    【讨论】:

      【解决方案3】:

      不妨试试:

      @IBAction func editingChanged(_ sender: UITextField) {
          print("The value is : \(sender.text)")
      }
      

      该函数应将您的文本字段识别为发件人。

      【讨论】:

      • 这会给出同样的警告信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      相关资源
      最近更新 更多