2016-07-05 99 views
-6

我试图将可选字符串转换为字符串,然后转换为Int64。将可选字符串转换为Int64

let number = blog["number"] as! String 
print(Int64(number)) 

问题是“数字”键是一个可选的字符串,所以它在去Int64时崩溃。我有几个方法来删除可选类型,但都没有工作。

+1

如何'blog'声明? – vacawama

+2

'as!'的意思是“请让我崩溃”。你得到了你所要求的。 – matt

+0

什么'print(blog [“number”] !. dynamicType)'print? – vacawama

回答

1
guard let string = blog["number"] as? String else { 
    /* Not a string, handle error here */ 
    return 
} 

guard let number = Int64(string) else { 
    /* string isn't an Int64, handle error here */ 
    return 
} 

//use number here 

您还可以使用if let做解缠,如果你不想退出你的函数。这不是漂亮,但:

if let string = blog["number"] as? String else { 
    if let let number = Int64(string) { 
     //use number here 
    } 
    else { 
     /* string isn't an Int64, handle error here */ 
    } 
} 
else { 
    /* Not a string, handle error here */ 
} 
+0

我实现你的第二个解决方案和字符串仍然是可选的,如果让string = blog [“number”] as?字符串如果让数字= Int64(字符串){ } – user1079052

+0

}确定吗?不要使用第二种解决方案,它仅仅是一个例子,显示如果可以使用“如果”。请尽可能使用'guard'。 – Alexander

+0

我使用了第一个解决方案,但失败了。当它进入第二次检查时,变量字符串仍然是可选的。 – user1079052

0

作为替代方案,您可以利用的NSNumberFormatter(具体计算财产longLongValue)从Foundation

import Foundation 

let dict = ["number": "500"] 

if let str = dict["number"], 
    let num = NSNumberFormatter().numberFromString(str)?.longLongValue { 

    /* 'num' is Int64 representation of 'dict["number"]', and we 
     reach this scope only if it exists and can validly be 
     represented as an Int64 number */ 
}