Swiftのデータの型について
Swiftは型推論という機能があり自動で変数に型を入れてくれます.この機能は便利な反面初学者を混乱させる一つの要因となっています.
なんとなく使っている変数の定義もこの記事を読んで納得してください.
var name = "Swift"
これは,単なる文字列です.エラーなくこれを実行することができます.
なぜでしょう?私は型を宣言していません.
これが実行できてしまうのは,Swiftが型推論を行っているからです.
型推論は,Swiftが自動的に変数の型を解釈してくれる機能で,Pythonなどにも存在します.
しかし,この型推論を多く使ってしまうとエラーの元になるのでなるべく自分で型を定義してあげましょう.
型の定義の仕方
var name: String
name = "Swift"
var num: Int
num = 21
: の間にスペースを入れるのは,型との間だけに入れるのが一般です
ここまで読むと型推論の方がいいじゃんと思うかもしれませんね.次のセクションを読んでください.
では,型の定義が重要になってくるDoubleとFloatについてやっていきましょう.DoubleとFloatは他の言語でも多く使われています.
もう一度定義をみていきましょう.
DoubleとFloatの例
今回は緯度と経度についての例を使って説明します.
var latitude: Double
latitude = 33.589552
var longitude: Float
longitude = 130.396933
この場所にはなにがある?=>🍎 さて本題に,DoubleとFloatの違いはなんでしょうか?
printしてみましょう.すると・・・
var latitude: Double
latitude = 33.589552
=> 33.589552
var longitude: Float
longitude = 130.396933
=> 130.3969
あれれ?よくみるとFloatの値が元の値じゃなくなってますね.
これらのことから,DoubleとFloatは精度が違うことがわかります.違いが分かりにくかったですね.
分かりやすい例でみていいきましょう.
var latitude: Double
latitude = 33.5895525654
=> 33.5895525654
var longitude: Float
longitude = 234130.3969333
=> 234130.4
どうです?明らかに違いがわかるでしょう.
- Float =>32bit型
- Double=>64bit型
などと呼ばれています. したがって,むやみに型推論を使っていると予期しないことが起きたりします.
特に指定がない限り,Doubleを使ってください.
型を変換する方法
でも,プログラムを書いていると,32bitの引数しか受け付けないファンクションがあります.
その場合,Double型ではなくてFloat型に変換する必要があります.
どうする?型の定義を再定義してFloatに変更する? いやいや,Swiftは型をラッピングすることができます.
var latitude: Double
latitude = 33.5895525654
func 32bitFunc(f_value:Float){
print("This is Float Value => \(f_value)")
}
32bitFunc(latutude)
//error
32butFunc定義した型と代入する型が違うのでエラーが出ます.
どうやって解決する?
var latitude: Double
latitude = 33.5895525654
func 32bitFunc(f_value:Float){
print("This is Float Value => \(f_value)")
}
32bitFunc(Float(latutude))
//This is Float Value => 33.58955
変数の前に変換したい型でくくってやれば,その型に早変わりします.
String( Doubleの値 )
のように型を変更することができます.
元の変数の型は変わらないので注意
今回は,データの型についてを初心者向けに説明しました.
Swiftの型推論機能は便利ですがここまで理解して使用することが大切です.