技術ブログ

プログラミング、IT関連の記事中心

型の変換【Swift】

◾️型に厳格

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) ?? 変換できない場合の値