如何解开可选字符串的包装,然后将其转换为 Double 的数据类型?



我正在为我工作的公司设计一个应用程序,它使用基本的 y=mx+c(如果您来自美国,则为 y=mx+b(来获取 2 个校准值和 2 个输入值来输出比例和偏移值。该应用从总共 4 个文本字段中获取用户输入,然后使用几个公式输出到文本视图中。我的问题是输入值需要是"双精度"才能在公式(除数、m_FinalScale、m_FinalOffset(中使用,而用户输入的值是"字符串",因为它们来自文本字段。我怎样才能解开包装并转换这些可选字符串以供使用?

override func viewDidLoad() {
super.viewDidLoad()
Cal1Field.delegate = self
Cal2Field.delegate = self
Input1Field.delegate = self
Input2Field.delegate = self
}
//Actions
@IBAction func CalibrateTapped(_ sender: Any) {
var Divisor = 0.0, m_FinalScale = 0.0, m_FinalOffset = 0.0
// this is what the formulas are
Divisor = Input2Field.text - Input1Field.text
m_FinalScale = (Cal2Field.text - Cal1Field.text)/Divisor
m_FinalOffset = Cal1Field.text - (m_FinalScale*Input1Field.text)

}

你可以在这里使用flatMap

let input1 = input2Field.text.flatMap(Double.init)
let input2 = input2Field.text.flatMap(Double.init)
let cal1 = cal2Field.text.flatMap(Double.init)
let cal2 = cal2Field.text.flatMap(Double.init)

如果要避免代码重复,可以在UITextField上添加一个扩展:

extension UITextfield {
var doubleValue: Double? { text.flatMap(Double.init) }
}

,稍后您可以像这样使用它:

let input1 = input2Field.doubleValue
let input2 = input2Field.doubleValue
let cal1 = cal2Field.text.doubleValue
let cal2 = cal2Field.text.doubleValue

这里有几点注意事项:

  1. 我将文本字段重命名为以小写字母开头,以遵循 Swift 命名约定。
  2. input1input2cal1cal2都是可选的,如果有些是零(例如,用户输入了无效的值(,该怎么办。

您可以使用此扩展

extension String {
var convertItToDouble: Double? {
return Double(self) 
}
}

然后在你的方法中

@IBAction func CalibrateTapped(_ sender: Any) {
var Divisor = 0.0, m_FinalScale = 0.0, m_FinalOffset = 0.0
// this is what the formulas are
if let doubleCal1Field = Cal1Field.text?.convertItToDouble,  
let doubleCal2Field = Cal2Field.text?.convertItToDouble, 
let doubleInput1Field = Input1Field.text?.convertItToDouble, 
let doubleInput2Field = Input2Field.text?.convertItToDouble {
Divisor = doubleInput2Field - doubleInput1Field
m_FinalScale = (doubleCal2Field - doubleCal1Field)/Divisor
m_FinalOffset = doubleCal1Field - (m_FinalScale*doubleInput1Field)
}
}

最新更新