首页 > 解决方案 > 在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
  }

标签: swiftxcode

解决方案


假设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 合并的情况下使用。


推荐阅读