swift - 如何解开可选字符串,然后将其转换为 Double 数据类型?
问题描述
我正在为我工作的公司设计一个应用程序,它使用基本的 y=mx+c(如果您来自美国,则为 y=mx+b)获取 2 个校准值和 2 个输入值来输出比例和偏移量价值观。该应用程序从总共 4 个文本字段中获取用户输入,然后使用一些公式将其输出到文本视图中。我的问题是输入值需要是“双倍”才能在公式(Divisor、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
这里有几点注意事项:
- 我将文本字段重命名为以小写字母开头,以遵循 Swift命名约定。
input1
,input2
,cal1
,cal2
是可选的,如果有些是 nil (例如用户输入的值无效),您可以调用。
推荐阅读
- javascript - 循环遍历 javaScript 对象返回值为 0 和 false 的“未定义”
- java - onActivityResult 没有从适配器调用
- django - json.loads 将有效的 JSON 转换为无效的 JSON
- r - 安装 R 包卡在 g++ -std=gnu++11?
- jgrapht - 如何使用 jgrapht 使用 sugraph 创建图形
- php - 有没有办法在不丢失标记的情况下将 html 分配给 php 变量?
- c# - “对象”不包含定义
- amazon-ec2 - 当有足够的缓存内存时,无法分配 GPU 内存
- ios - tableView 数据源的字典
- python - 如何从 nodejs 服务器(在 Windows 上运行)运行 Python 脚本(在 Linux 上)