【问题标题】:How do you test a textField isn’t empty before passing it to a function:在将 textField 传递给函数之前如何测试它是否为空:
【发布时间】:2020-12-06 00:23:06
【问题描述】:

我有一个接受数字的文本字段。
当在数字键盘区域外点击以关闭键盘时,它会将文本字段值传递给函数。

当文本字段为空时,我收到 NIL unpacked optional 错误并崩溃。

当文本字段中没有任何内容时,我正在尝试找到一种将“0”传递给变量的方法。

变量

@IBOUTLET weak var per1kCollector: UITextField?
var per1k = 0

关闭键盘并调用函数的处理程序 per1k 抓取文本字段 如果 collector.text 为 NIL,则 per1k 需要 0

@objc func handleTap(_ recognizer: UITapGestureRecognizer) {
    print("closing number pad")
    
            view.endEditing(true)
            per1k = (Int(per1kCollector!.text!)! ?? 0)

            doSomeMath()
    
}

这一直说“无法将'int'类型的值转换为预期的参数类型'string'。但是,我正在使用文本字段的Int,而per1k IS类型int。????

【问题讨论】:

  • 任何时候你的代码说!你应该预期崩溃。尽量避免它。几乎不需要它。
  • 也不要在问题中输入您的“代码”。复制并粘贴真实代码。像@IBOUTLET 这样的废话是不必要的。
  • 不确定我是否关注你。当我在其他任何地方看到屏幕截图时,建议人们剪切和粘贴,这就是我所做的。
  • 不,你没有,因为没有 @IBOUTLET 这样的东西。如果你这么说,你的代码永远不会编译。您会收到错误消息“未知属性 'IBOUTLET'”。

标签: swift optional conditional-operator


【解决方案1】:

任何时候您的代码显示!,您都应该预计会崩溃。尽量避免它。很少需要它。在这种情况下,只需使用问号:

 per1k = Int(per1kCollector?.text ?? "0") ?? 0

【讨论】:

  • 每次我不这样做时,我都会不断得到该死的选项来修复它...相信我,我正在尝试
  • 马特,感谢您的帮助。我仍然收到无法将 Int 转换为预期参数 String 的错误。我不确定它指的是什么字符串。 textField 值正在使用 Int() 处理,并且那里的变量被初始化为 Int。
  • OK 已修复,对此感到抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
  • 2021-03-04
相关资源
最近更新 更多