#01 では、変数と定数について学びました!次に、Swift の基本的な型と各型の操作について学んでいきましょう!
型とは?
型は、変数に保存できるデータの種類を表したものです。変数と型の関係は、入れる用途が決まっている箱をイメージすると良いでしょう。入れる用途=型、箱=変数です。フルーツ用の箱には、フルーツしか入れられないように、整数型の変数には、整数しか保存することができません。
変数と定数についての詳細は、前回の記事をご参照ください。
Swift の型には、他のプログラミング言語と同様に、真偽の値であることを表す型(Bool)や数値を表す型(Int、Float、Double)、文字列を表す型(String)などがあります。
それでは、順番に見ていきましょう!
Bool 型
Bool 型は、値が真(true)か偽(false)どちらかであることを表します。
以下のようにして、Bool 型変数(定数)を宣言することができます。
var a: Bool = true
let b = false // 型推論で宣言
Bool 型の操作
Bool 型は、論理演算を行うことができます。論理演算は、否定、論理積、論理和の3種類があります。
論理演算 | 演算子 | 演算内容 |
否定 | ! | 真と偽を逆にする。つまり、true なら false、false なら true にする。 |
論理積 | && | 演算に使う値が全て真のとき、演算結果は真になる。それ以外は、偽になる。 |
論理和 | || | 演算に使う値に一つでも真が含まれているとき、演算結果は真になる。 |
// 否定
!true // 演算結果は false
!false // 演算結果は true
// 論理積
true && true // 演算結果は true
true && false // 演算結果は false
false && true // 演算結果は false
false && false // 演算結果は false
// 論理和
true || true // 演算結果は true
true || false // 演算結果は true
false || true // 演算結果は true
false || false // 演算結果は false
数値型
Int 型
Int 型は、整数の数値を表す型です。
以下のようにして、Int 型変数(定数)を宣言することができます。
var a: Int = 100
let b = 200 // 型推論で宣言
Float 型
Float 型は、小数の数値を表す型です。
以下のようにして、Float 型変数(定数)を宣言することができます。
var a: Float = 1.05
let b = 22.4 // 型推論で宣言
Double 型
Double 型も Float 型と同様、小数の数値を表す型です。
Float 型との違いは、対応している値の範囲や値の精度にあります。Double 型の方が範囲が広く、精度も高くなります。
高い精度の小数が必要になる場合は、Double 型を使用しましょう。
以下のようにして、Double 型変数(定数)を宣言することができます。
var a: Double = 1.05
let b = 3.141592 // 型推論で宣言
数値型の操作
演算
数値型の演算には、主に比較演算と算術演算があります。演算に使う値は、全て同じ型の値である必要があります。
比較演算では、大小関係を判定することができます。判定結果は、Bool 型 になります。
// 左辺と右辺が一致しているか
10 == 10 // 演算結果は、true
// 左辺と右辺が一致していないか
20.5 != 10.7 // 演算結果は、true
// 左辺が右辺より大きいか
5 > 10 // 演算結果は、false
// 左辺が右辺以上か
20.0 >= 20.0 // 演算結果は、true
// 左辺が右辺より小さいか
9.99 < 10.0 // 演算結果は、true
// 左辺が右辺以下か
30 <= 15 // 演算結果は、false
算術演算では、四則演算や剰余演算を行うことができます。
// 加算
1 + 4 // 演算結果は、5
// 減算
2.2 - 1.0 // 演算結果は、1.2
// 乗算
10 * 5 // 演算結果は、50
// 除算
9.9 / 3.3 // 演算結果は、3.0
// 剰余算
15 % 4 // 演算結果は、3(15÷4のあまり)
他の型への変換
let intNum = 20
let FloatNum = 4.15
let a: Int = Int(FloatNum) // Int型へ変換、4.15 → 4(小数点切り捨て)
let b: Float = Float(intNum) // Float型へ変換、20 → 20.0
let c: Double = Double(intNum) // Double型へ変換、20 → 20.0
let d: String = String(intNum) // String型へ変換、20 → "20"
String 型
String 型は、文字列を表す型です。
以下のように、宣言して使用することができます。
var a: String = "abc"
let b = "123" // 型推論で宣言
以下のように、”””で囲って複数行の文字列を指定することできます。
let heike = """
祇園精舎の鐘の声、諸行無常の響あり。
沙羅双樹の花の色、盛者必衰の理をあらはす。
おごれる人も久しからず、ただ春の夜の夢のごとし。
たけき者も遂にはほろびぬ、ひとへに風の前の塵に同じ。
"""
String 型の操作
String 型の操作には、文字列同士の比較、文字列の結合、数値型への変換があります。
比較
文字列同士で、一致しているか判断できます。==の演算子を使用します。
"abc" == "abc" // 結果は、true
"abc" == "123" // 結果は、false
結合
文字列と文字列を結合して、一つの文字列にすることができます。+の演算子を使用するか、append() メソッドを使用します。
let string1 = "abc"
let string2 = "def"
// +演算子を使用
string1 + string2 // "abcdef"
// append()メソッドを使用
string1.append(string2) // "abcdef"
数値型への変換
文字列から数値に変換することができます。数値に変換できない場合は、nil となります。そのため、変換結果は、nil になっても良い Optional<Int> 型の値となっています。 Optional<Int> 型の一般形である Optional<Wrapped> 型については、後ほど見ていきます。
let string1 = "123"
Int(string1) // Int型の数値としての 123 になる
let string2 = "123a"
Int(string2) // 数値に変換できないので、nil となる
その他の型
Optional<Wrapped> 型
ここまで見てきた型の変数は、nil を保存することができません。nil とは、変数に値が入っていないことを表します。値が入っていない変数を使用すると、プログラムはエラーになります。そのため、Swift では、通常は変数が nil になることを許していません。
Optional<Wrapped> 型は、通常は許されていない nil が変数に入ることを許容します。Wrapped の部分には、具体的な型を入れます。Optional<Int> 型であれば、nil か整数であることを表し、Optional<String> 型であれば、nil か文字列であることを表します。
以下のようにして、Optinal<Wrapped> 型を宣言することができます。
let a: Optinal<Int> = 1
let b = Optional(1) // 型推論で宣言
また、Optional<Wrapped> 型は、Wrapped? で使用することもできます。
let a: Int? = 1
let b: String? = nil
Optional<Wrapped> 型の操作
Optional<Wrapped> 型は、nil の可能性があるため、Wrapped 型の演算を行うことができません。例えば、Optional<Int> 型は、Int 型の+、ーなどの演算を行うことができません。
let a: Int? = 1
let b: Int? = 2
a + b // エラー
そのため、演算を行う場合は、アンラップの操作を行う必要があります。
アンラップの方法は、何種類かありますが、ここでは、if let 文によるオプショナルバインディングと強制アンラップについて紹介します。
オプショナルバインディング
オプショナルバインディングは、条件に Optional<Wrapped> 型の値を指定して、条件分岐で nil でなかった場合に、Wrapped 型の値として取り出すことができる方法です。
オプショナルバインディングの基本的な形は、以下のようになっています。
if let 定数名 = Optional<Wrapped> 型の変数(定数)名 {
nil ではなかった場合の処理
}
以下の使用例では、Optional<String> 型の optionalNum に値が入っているので、if let 文でその値を Int 型として取り出して定数 a に代入し、演算を行なっています。
let optionalNum: Int? = 1
let num: Int = 1
if let a = optionalNum {
a + num // 2
}
強制アンラップ
強制アンラップは、Optinal<Wrapped> 型から強制的にWrapped 型を取り出す方法です。強制的に取り出した値が nil の場合はエラーになります。
以下のように、! を使用することで、強制アンラップすることができます。
let num1: Int? = 1
let num2: Int? = 1
num1! + num2! // 2
このように、強制アンラップは、コードをシンプルに書くことができますが、nil の場合はエラーになってしまいます。そのため、nil でないことが明らかな場合やエラー終了させたい場合以外は、強制アンラップを使用しない方が良いでしょう。
Void 型
Void 型は、値が存在しないことを表す型です。nil と似ていますが、nil は、値が入る変数に値がないことを表しているのに対して、Void 型は、そもそも値を入れる変数がないことを表しています。
Void 型は主に、関数に戻り値がないことを表す際に使用します。
まとめ
今回は、Swift の型と各型の操作について見ていきました!
- Bool 型…真と偽どちらかの値であることを表す型
- 数値型
- Int 型…整数の数値であることを表す型
- Float 型…小数の数値であることを表す型
- Double 型…Float 型よりも範囲が広く、精度が高い小数の数値であることを表す型
- String 型…文字列であることを表す型
- その他
- Optional<Wrapped> 型…nil を許容した型
- Void 型…値がないことを表す型
以上で、【Swift入門】#02 基本的な型と各型の操作 は終わりです。
コメント