因此,我正在尝试将十六进制的任何值转换为二进制,但是似乎我的代码不接受2f等。我在做什么错了?
@IBOutlet weak var input: UITextField!
@IBOutlet weak var mylabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func getresults(_ sender: Any) {
if Int(input.text!,radix:16) != nil
let hex = String(Int(input.text!,radix:16)!, radix:2)
mylabel.text = "The Hexadecimal of \(input.text!) conversion is: \(hex)"
}else{
mylabel.text = "Wrong input"
}
}
答案 0 :(得分:2)
我会将您的函数更改为此...(我还更改了一些变量名,因为它们目前有些混乱)
@IBAction func getresults(_ sender: Any) {
if let inputText = input.text, // 1
let inputHex = Int(inputText, radix: 16) { // 2
let binary = String(inputHex, radix: 2) // 3
mylabel.text = "The Hexadecimal of \(inputText) conversion is: \(binary)"
}else{
mylabel.text = "Wrong input"
}
}
检查输入是否为nil。
将输入转换为十六进制Int。
如果以上任何一项失败,则显示“输入错误”。
然后显示二进制文件。
不建议使用强行解包!
,因为如果值为nil
,它将使您的应用程序崩溃。使用if let
(可选绑定)是一种检查其是否为nil并将值绑定到非可选变量的方法。
答案 1 :(得分:0)
您要检查的第一件事
if Int(input.text!) != nil
用来查看输入文本是否为有效整数-而不是它是否包含2f
您应该检查有效的十六进制,而不是检查有效的整数
if Int(input.text!,radix:16) != nil