◾️型に厳格
Swiftは型に厳格な言語である。
例えばObjective-Cの場合には、次のようにint型の値をdouble型の変数に代入できた。
(例)
int a = 5;
double b = a;
しかし、上記の様な記載方法はSwiftではエラーとなる。
Int型の値をDouble型の変数に入れたい場合は、次のように型変換を行い、Int型をDouble型に変換してから代入する必要がある。
(記載ルール)
let 定数名1:Int = 数値
let 定数名2:Double = Double(定数名1)
(例)
let a:Int = 5
let b:Double = Double(a)
上記以外にも、型変換が必要になる事が多い。
以下でそれぞれの型変換の方法を記載する。
◾️型変換
以下に型変換の方法をまとめる。
※型変換する際に「変換する型(値)! 」の形で変換している物があるが、後の「型変換の相違」で説明する。
[Int型→String型]
(記載ルール)
let 定数名1:Int = 数値
let 定数名2:String = String(定数名1)
(例)
let num:Int = 1
let str:String = String(num)
[Int型→Double型]
(記載ルール)
let 定数名1:Int = 数値
let 定数名2:Double = Double(定数名1)
(例)
let num:Int = 1
let double:Double = Double(num)
[Int型→Float型]
(記載ルール)
let 定数名1:Int = 数値
let 定数名2:Float = Float(定数名1)
(例)
let num:Int = 1
let float:Float = Float(num)
[Float型→String型]
(記載ルール)
let 定数名1:Float = 浮動少数型の値
let 定数名2:String = String(定数名1)
(例)
let float:Float = 1.234
let string:String = String(float)
[Float型→Int型]
(記載ルール)
let 定数名1:Float = 浮動少数型の値
let 定数名2:Int = Int(定数名1)
(例)
let float:Float = 1.234
let num:Int = Int(float)
[Float型→Double型]
(記載ルール)
let 定数名1:Float = 浮動少数型の値
let 定数名2:Double = Double(定数名1)
(例)
let float:Float = 1.234
let double:Double = Double(float)
[Double型→String型]
(記載ルール)
let 定数名1:Double = 浮動少数型の値
let 定数名2:String = String(定数名1)
(例)
let double:Double = 1.234
let str:String = String(double)
[Double型→Int型]
(記載ルール)
let 定数名1:Double = 浮動少数型の値
let 定数名2:Int = Int(定数名1)
(例)
let double:Double = 1.234
let num:Int = Int(double)
[Double型→Float型]
(記載ルール)
let 定数名1:Double = 浮動少数型の値
let 定数名2:Float = Float(定数名1)
(例)
let double:Double = 1.234
let float:Float = Float(double)
[String型→Int型]
(記載ルール)
let 定数名1:String = 文字列
let 定数名2:Int = Int(定数名1)
(例)
let str: String = "1"
let num: Int = Int(str)!
[String型→Double型]
(記載ルール)
let 定数名1:String = 文字列
let 定数名2:Double = Double(定数名1)
(例)
let str:String = "1.234"
let double:Double = Double(str)!
[String型→Float型]
(記載ルール)
let 定数名1:String = 文字列
let 定数名2:Float = Float(定数名1)
(例)
let str:String = "1.234"
let float:Float = Float(str)!
[String型→Bool型]
(記載ルール)
let 定数名1:String = 文字列
let 定数名2:Bool = Bool(定数名1)
(例)
let str:String = "true"
let bool:Bool = Bool(str)!
[Bool型→String型]
(記載ルール)
let 定数名1:Bool = 文字列
let 定数名2:String = String(定数名1)
(例)
let bool:Bool = true
let str:String = String(bool)
◾️型変換の相違
型変換で、以下の様な場合、型変換ができない。
(例)
let str: String = "Hello"
let num: Int = Int(str)!
→数字ではない値を数字に変換しようとしている為、エラー
上記は、型変換を行なっている「Int(str)!」で強制的にInt型へ変換しようとしている為、エラーとなる。
※上記の為、必ず変換ができる場合のみ「!」を使用して型変換を行う事。
その為、以下の様に記載する事でエラーを回避する事ができる。
(例)
let str: String = "Hello"
let num: Int = Int(str) ?? 0
上記は、「もし型変換ができない場合には0を代入する」という宣言である。
String型からInt型への型変換に限らず、以下の記載ルールで型変換のエラー回避が可能である。
(記載ルール)
let 定数名1:型 = 値
let 定数名2:型 = 変換後の型(定数1) ?? 変換できない場合の値