在Swift中解包可选的Int

时间:2015-04-15 16:56:29

标签: ios swift optional

我正在处理的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

1 个答案:

答案 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