2016-07-05 4 views
-6

オプションの文字列を文字列に変換してからInt64に変換しようとしています。オプションの文字列をInt64に変換します

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

「数字」キーはオプションの文字列であるため、Int64に行くとクラッシュするという問題があります。オプションの型を削除するにはいくつかの方法がありますが、どちらも機能しません。

+1

'宣言blog'される方法は? – vacawama

+2

'として!'は「私をクラッシュしてください」を意味します。あなたはあなたが求めたものを持っています。 – 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

私はあなたの2番目の解決策を実装しました。文字列= blog ["number"]をlet?文字列{ の場合はlet number = Int64(string){ phoneNumberArray.addObject(PhoneNumberObject(type:(ブログの[型]は文字列)!、number:number)) } } – user1079052

+0

本当ですか? 2番目の解決策を使用しないでください。それは、「もしかしたらどうすればよいか」を示す例に過ぎません。可能であれば、 'guard'を使用してください。 – Alexander

+0

私は最初の解決方法を使用しましたが、失敗します。変数stringは、2番目のチェックに到達してもオプションです。 – user1079052

0

、あなたはFoundationからNSNumberFormatter(具体的には、計算されたプロパティlongLongValue)を利用することができます:

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 */ 
} 
関連する問題