swift - 在swift / Xcode中将UItextField从引用出口集合从String转换为Float
问题描述
我停留在我的代码的这一部分,我试图从输入到我的文本字段中的数字中获得平均百分比。我对此很陌生,如果有人能提供帮助并告诉我哪里出错并指出我正确的方向,我将不胜感激。
class ingredientViewController: UIViewController, UITextFieldDelegate {
@IBOutlet var abvTextFields: [UITextField]!
@IBOutlet var AbvTotal: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
AbvTotal.layer.cornerRadius = 8.0
}
func abvList(abvTextFields:Int...) -> Float {
let abv1 = Float(abvTextFields.reduce(0,+))
let abv2 = Float(abvTextFields.count)
let abv3 = abv1 / abv2
return abv3
}
解决方案
假设abvTextFields
是文本字段的有效出口集合,它们的内容将是字符串,因此尝试使用 reduce(0,+) 对它们求和是行不通的。您需要先将它们转换为 Ints:
let sum = abvTextFields.compactMap({Int($0.text ?? "")}).reduce(0,+)
let validNumbers = abvTextFields.compactMap({Int($0.text ?? "")}).count
let average = sum / validNumbers
上面通过 nil 为它们的内容合并一个空字符串来处理为空的文本字段,然后尝试将字符串转换为 Int。如果字符串不是数字转换为 Int 将返回 nil,因此使用 compactMap 删除这些情况。
可以在一个复杂的 reduce 块中完成所有转换,但这更清楚地展示了这些步骤。
编辑注意下面的评论。只需在Int($0.text!)
没有 nil 合并的情况下使用。
推荐阅读
- python - 如何将 AWS CloudTrail JSON 日志读入 pandas 数据帧
- python - 如何从 QdateEdit pyqt 获取昨天
- python - 如何使用 python 库解析器接收 1 个参数并仅使用该参数?
- python - 使用 for 循环迭代到多维元组
- list - 获取 Map 中存在的 List 的长度
> 在颤振中 - c# - 更改单选按钮 WPF C# 内的路径填充
- c# - C#如何定义api键等全局常量并防止上传到Github
- javascript - Stoplight Spectral - 通过函数在规则中使用逻辑 OR
- perl - Perl 拆分突然停止
- ant - 无法使用 XmlTask 选择具有属性的 XML 根节点