我正在处理的API响应返回总金额。它支持多种不同的货币,因此有时货币符号将位于前面(例如$ 20.00)或最后(ex.20.00€)。我正在检查该值的第一个字符是否为int。在这种特定情况下,返回值“20.00€”。 firstChar是“2”:
不工作:
let firstNumOpt: Int? = String(firstChar).toInt()
if let num = firstNumOpt { //20.00€
NSLog("Total: \(total)")
}
工作:
if let num = String(firstChar).toInt() { //20.00€
NSLog("Total: \(total)")
}
有人可以解释为什么第一个代码块不起作用吗?两种方式都与我相同。
一些调试信息:
(lldb)po firstNumOpt
2
{
值= 2
}(lldb)po num
411432864
答案 0 :(得分:1)
注意 :这不是一个真正的答案,但我需要发布代码来描述工作原理。
我不确定您的错误是否在您发布的代码中。这是我刚刚在一个空的操场上运行的一些代码:
func test(str: String) {
let firstNumOpt: Int? = String(str[str.startIndex]).toInt()
if let anum = firstNumOpt {
print("First worked on \(str)")
}
if let bnum = String(str[str.startIndex]).toInt() {
print("Second worked on \(str)")
}
}
test("20.00€") // prints "First worked on 20.00€" and "Second worked on 20.00€"
test("$20.00") // doesn't print anything