Swift データ型

私たちがプログラミング言語でプログラムを書くとき、さまざまなデータ型を使って異なる情報を保存する必要があります。

変数のデータ型は、これらの値を表すビットをコンピュータのメモリにどのように格納するかを決定します。変数を宣言するときに、そのデータ型を指定することもできます。

すべての変数にはデータ型があり、どの種類のデータを格納できるかを決定します。


組み込みデータ型

Swiftは非常に豊富なデータ型を提供しています。以下に、よく使われるいくつかのデータ型を示します。

Int

一般的に、整数の長さを特別に指定する必要はありません。Swiftは特別な整数型を提供します。Int、その長さは現在のプラットフォームのネイティブワード長と同じです:

  • 32ビットプラットフォームでは、IntとInt32長さは同じです。
  • 64ビットプラットフォームでは、IntとInt64長さは同じです。

特定の長さの整数が必要でない限り、一般的にはIntで十分です。これにより、コードの一貫性と再利用性が向上します。32ビットプラットフォームでも、Int格納できる整数の範囲も達することができます-2,147,483,648~2,147,483,647、ほとんどの場合これで十分です。

UInt

Swiftは特別な符号なし型も提供します。UInt、その長さは現在のプラットフォームのネイティブワード長と同じです:

  • 32ビットプラットフォームでは、UIntとUInt32長さは同じです。
  • 64ビットプラットフォームでは、UIntとUInt64長さは同じです。

注意:できるだけ使用しないでくださいUInt本当に現在のプラットフォームのネイティブワード長と同じ符号なし整数を格納する必要がある場合を除き、それ以外の場合は、使用するのが最善です。Int、たとえ格納する値が非負であると分かっている場合でもです。一貫して使用するとIntコードの再利用性を向上させ、異なる型の数値間の変換を避け、数値の型推論と一致させることができます。

整数型について、以下の点に注意してください。

  • 32ビットシステムでは、Int と Int32 の長さは同じです。

  • 64ビットシステムでは、Int と Int64 の長さは同じです。

  • 32ビットシステムでは、UInt と UInt32 の長さは同じです。

  • 64ビットシステムでは、UInt と UInt64 の長さは同じです。

  • Int8、Int16、Int32、Int64 はそれぞれ 8 ビット、16 ビット、32 ビット、64 ビットの符号付き整数形式です。

  • UInt8、UInt16、UInt32、UInt64 はそれぞれ 8 ビット、16 ビット、32 ビット、64 ビットの符号なし整数形式です。

浮動小数点数:Float、Double

浮動小数点数は小数部分を持つ数値です。例えば3.14159,0.1と-273.15。

浮動小数点型は整数型よりも表現範囲が広く、格納できる数値はIntInt 型より大きいまたは小さい数値です。Swift は2つの符号付き浮動小数点型を提供しています。

  • Double64ビット浮動小数点数を表します。非常に大きいまたは高精度の浮動小数点数を格納する必要がある場合は、この型を使用してください。
  • Float32ビット浮動小数点数を表します。精度がそれほど要求されない場合は、この型を使用できます。

注意:
Double精度は非常に高く、少なくとも15桁あります。一方、Float最小で6桁しかありません。どちらの型を選ぶかは、コードで処理する値の範囲によって決まります。

ブール値:Bool

Swiftには、Boolと呼ばれる基本的なブール(Boolean)型があります。ブール値は論理的な値を指し、真または偽のみです。Swiftには、true と false の2つのブール定数があります。

文字列:String

文字列は文字の並び(コレクション)です。例:

"Hello, World!"

文字:Character

文字は単一の文字を指します。例:

"C"

オプショナル型:Optional

オプショナル型は、値が存在しない可能性がある場合を処理するために使用します。オプショナル型は、値があるか、値がないかのいずれかを表します。

数値範囲

次の表は、さまざまな変数型のメモリの格納容量と、変数型の最小値と最大値を示しています。

型 サイズ(バイト) 範囲
Int8 1 バイト -128 から 127
UInt8 1 バイト 0 から 255
Int32 4 バイト -2147483648 から 2147483647
UInt32 4 バイト 0 から 4294967295
Int64 8 バイト -9223372036854775808 から 9223372036854775807
UInt64 8 バイト 0 から 18446744073709551615
Float 4 バイト 1.2E-38 から 3.4E+38 (~6 digits)
Double 8 バイト 2.3E-308 から 1.7E+308 (~15 digits)

型エイリアス

型エイリアスは、現在の型に対して別の名前を定義します。型エイリアスは、typealias キーワードを使用して定義します。構文は次のとおりです:

typealias newname = type

例えば、次は Int の型エイリアスとして Feet を定義しています:

typealias Feet = Int

これで、エイリアスを使用して変数を定義できます:

import Cocoa

typealias Feet = Int
var distance: Feet = 100
print(distance)

playground で上記のプログラムを実行すると、出力結果は次のようになります:

100

型安全性

Swiftは型安全(type safe)な言語です。

Swiftは型安全であるため、コードをコンパイルするときに型チェック(type checks)を行い、一致しない型をエラーとしてマークします。これにより、開発の早い段階でエラーを発見して修正することができます。

import Cocoa

var varA = 42
varA = "This is hello"
print(varA)

上記のプログラムは、Xcode でエラーになります:

error: cannot assign value of type 'String' to type 'Int'
varA = "This is hello"

これは、'String' 文字列を 'Int' 変数に代入できないことを意味します。


型推論

異なる型の値を扱うとき、型チェックはエラーを避けるのに役立ちます。ただし、これは定数や変数を宣言するたびに型を明示的に指定する必要があるという意味ではありません。

型を明示的に指定しない場合、Swift は型推論(type inference)を使用して適切な型を選択します。

例えば、新しい定数に42を代入し、型を明示しない場合、Swift は定数の型が Int であると推論できます。なぜなら、代入した初期値が整数のように見えるからです:

let meaningOfLife = 42
// meaningOfLife 会被推测为 Int 类型

同様に、浮動小数点数リテラルに型を指定しない場合、Swift は希望する型が Double であると推論します:

let pi = 3.14159
// pi 会被推测为 Double 类型

浮動小数点数の型を推論するとき、Swift は常に Float ではなく Double を選択します。

式に整数と浮動小数点数の両方が含まれる場合、Double 型として推論されます:

let anotherPi = 3 + 0.14159
// anotherPi 会被推测为 Double 类型

原始値3には型が明示的に宣言されていませんが、式には浮動小数点数リテラルが含まれているため、式は Double 型として推論されます。

サンプル

import Cocoa

// varA 会被推测为 Int 类型 
var varA = 42
print(varA)

// varB 会被推测为 Double 类型  
var varB = 3.14159
print(varB)

// varC 也会被推测为 Double 类型   
var varC = 3 + 0.14159
print(varC)

上記のコードを実行すると、出力結果は次のようになります:

42
3.14159
3.14159
その他の拡張