2016-07-05 61 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 */ 
}