ios - 如何将文本输入从字符串转换为浮点数
问题描述
我正在创建一个计算器/单位转换应用程序,并且只希望文本输入只接受浮点数和整数。我尝试将文本输入键盘设置为数字键盘,但程序仍将其视为“字符串?”。
编辑:我的最终目标是有一个接受浮点数的文本输入,并且可以允许我的程序这样对待它。目前,当输入数字时,代码仍将其视为字符串。我希望将其转换为浮点数。
我读到 using(...as NSString).floatValue
会起作用,但似乎对我不起作用。这是我的代码
import UIKit
class ViewController: UIViewController{
@IBOutlet weak var numberOutput: UILabel!
@IBOutlet weak var numberInput: UITextField!
//
@IBAction func onTouchDown(_ sender: UITextField) {
var number = (numberInput.text as NSString).floatValue
print(number*2)
}
}
解决方案
您只能允许数字和“。” 使用shouldChangeCharactersInRange
方法:
func textField(textField: UITextField, shouldChangeCharactersInRange range: Range, replacementString string: String) -> Bool
{
let newCharacters = CharacterSet(charactersIn: string)
let isNumber = CharacterSet.decimalDigits.isSuperset(of: newCharacters)
if isNumber {
return true
} else {
if string == "." {
let dotscount = textField.text!.components(separatedBy: ".").count - 1
if dotscount == 0 {
return true
} else {
if dotscount > 0 && string == "." {
return false
} else {
return true
}
}
} else {
return false
}
}
}
不要忘记设置textField.delegate = self
(在你的情况下是numberInput.delegate = self
)viewDidLoad()
并添加UITextFieldDelegate
为你的 viewController 类的协议(你的情况是class ViewController: UIViewController, UITextFieldDelegate
)
此方法将替换所有字符,除了(1234567890 和一个“.”)
您可以像这样将 numberInput.text 获取为 Int 或 FloatInt(numberInput.text)!
或Float(numberInput.text)!
推荐阅读
- eclipse - Maven依赖未传播到依赖项目
- json - bodymovin:将 .JSON 转换为 .SVG?
- flutter - 如何在颤动几秒钟后更新图像?
- c# - 如何在 Xamarin 表单的 ListView 中绑定本地嵌入图像?
- c# - 如何收集仅与我的程序有关的网络统计信息?
- javascript - 订阅本地引用的 Observable 可以被垃圾收集吗?
- java - 错误说“缺少返回语句”,但我不知道将返回语句放在哪里
- c - fgets后的分段错误-c程序
- python - 在没有第一行的情况下将数据从 CSV 转换为字典
- swift - pod安装后FirebaseUI Pod的Xcode项目构建错误“选择器'labelColor'的已知类方法”