オプションの文字列を文字列に変換してからInt64に変換しようとしています。オプションの文字列をInt64に変換します
let number = blog["number"] as! String
print(Int64(number))
「数字」キーはオプションの文字列であるため、Int64に行くとクラッシュするという問題があります。オプションの型を削除するにはいくつかの方法がありますが、どちらも機能しません。
オプションの文字列を文字列に変換してからInt64に変換しようとしています。オプションの文字列をInt64に変換します
let number = blog["number"] as! String
print(Int64(number))
「数字」キーはオプションの文字列であるため、Int64に行くとクラッシュするという問題があります。オプションの型を削除するにはいくつかの方法がありますが、どちらも機能しません。
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 */
}
私はあなたの2番目の解決策を実装しました。文字列= blog ["number"]をlet?文字列{ の場合はlet number = Int64(string){ phoneNumberArray.addObject(PhoneNumberObject(type:(ブログの[型]は文字列)!、number:number)) } } – user1079052
本当ですか? 2番目の解決策を使用しないでください。それは、「もしかしたらどうすればよいか」を示す例に過ぎません。可能であれば、 'guard'を使用してください。 – Alexander
私は最初の解決方法を使用しましたが、失敗します。変数stringは、2番目のチェックに到達してもオプションです。 – user1079052
、あなたは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 */
}
'宣言blog'される方法は? – vacawama
'として!'は「私をクラッシュしてください」を意味します。あなたはあなたが求めたものを持っています。 – matt
'print(blog [" number "] !. dynamicType)' printとは何ですか? – vacawama