Swift データ型


どのようなプログラミング言語でプログラムする場合でも、さまざまな情報を保存するためにさまざまなデータ型を使用する必要があります。

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

すべての変数には、保存できるデータの種類を決定するデータ型があります。


組み込みデータ型

Swift は、非常に豊富なデータ型を提供します。一般的に使用されるデータ型をいくつか示します。

Int

一般的に、整数の長さを具体的に指定する必要はありません。 Swift は特別な整数型 Int を提供しており、その長さは現在のプラットフォームのネイティブの単語長と同じです: Int,长度与当前平台的原生字长相同:

  • 在32位平台上,IntInt32长度相同。

  • 在64位平台上,IntInt64长度相同。

除非你需要特定长度的整数,一般来说使用Int就够了。这可以提高代码一致性和可复用性。即使是在32位平台上,Int可以存储的整数范围也可以达到-2,147,483,648~2,147,483,647,大多数时候这已经足够大了。

UInt

Swift 也提供了一个特殊的无符号类型UInt,长度与当前平台的原生字长相同:

  • 在32位平台上,UIntUInt32长度相同。

  • 在64位平台上,UIntUInt64长度相同。

注意:
尽量不要使用UInt,除非你真的需要存储一个和当前平台原生字长相同的无符号整数。除了这种情况,最好使用Int,即使你要存储的值已知是非负的。统一使用Int可以提高代码的可复用性,避免不同类型数字之间的转换,并且匹配数字的类型推断,请参考类型安全和类型推断。

浮点数

浮点数是有小数部分的数字,比如3.141590.1-273.15

浮点类型比整数类型表示的范围更大,可以存储比Int类型更大或者更小的数字。Swift 提供了两种有符号浮点数类型:

  • Double表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。

  • Float表示32位浮点数。精度要求不高的话可以使用此类型。

注意:
Double精确度很高,至少有15位数字,而Float

  • On 32-ビット プラットフォーム、IntInt32 は同じ長さです。 🎜
  • 🎜 64 ビット プラットフォームでは、IntInt64 は同じ長さになります。 🎜
🎜 特定の長さの整数が必要でない限り、通常は Int を使用するだけで十分です。これにより、コードの一貫性と再利用性が向上します。 32 ビット プラットフォームでも、Int で保存できる整数の範囲は -2,147,483,6482,147,483,647 に達する可能性があり、これはほとんどのプラットフォームで十分な大きさです。当時の。 🎜🎜🎜🎜UInt🎜🎜Swift は、特別な符号なし型 UInt も提供します。この長さは、現在のプラットフォームのネイティブの語長と同じです: 🎜
  • 🎜 32 ビット プラットフォームでは、UIntUInt32 は同じ長さになります。 🎜
  • 🎜 64 ビット プラットフォームでは、UIntUInt64 は同じ長さになります。 🎜
🎜注:
ネイティブの単語長と同じ長さの符号なし整数を本当に保存する必要がない限り、UInt は使用しないでください。現在のプラットフォーム。この場合を除き、保存したい値が負でないことがわかっている場合でも、Int を使用することをお勧めします。 Int を統一して使用すると、コードの再利用性が向上し、異なる型の数値間の変換が回避され、数値の型推論が一致します。「型の安全性と型の推論」を参照してください。 🎜
🎜浮動小数点数🎜🎜浮動小数点数は、3.141590.1-273.15 など、小数部を含む数値です。 。 🎜🎜浮動小数点型は整数型よりも広い範囲を表し、Int 型より大きいまたは小さい数値を格納できます。 Swift は 2 つの符号付き浮動小数点数型を提供します。 🎜
  • 🎜Double は 64 ビット浮動小数点数を表します。非常に大きい、または非常に高精度の浮動小数点数を格納する必要がある場合は、この型を使用します。 🎜
  • 🎜Float は 32 ビット浮動小数点数を表します。このタイプは、精度要件が高くない場合に使用できます。 🎜
🎜注:
Double は非常に正確で、少なくとも 15 桁ありますが、Float は少なくとも 6 桁です。数字。どのタイプを選択するかは、コードで処理する必要がある値の範囲によって異なります。 🎜

ブール値

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

String

文字列は文字のシーケンスです。例:

"Hello, World!"

Character

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

"C"

オプションのタイプ

欠損値の可能性を処理するにはオプションのタイプ (オプション) を使用します。 。オプションのタイプは、値を表すか値を表しません。



値の範囲

次の表は、さまざまな変数タイプの記憶領域と、変数タイプの最大値と最小値を示しています。

Int8UInt8Int32UInt32Int64 UInt64 FloatDouble

型エイリアス

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

typealias newname = type

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

typealias Feet = Int

ここで、エイリアスを通じて変数を定義できます:

import Cocoa

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

上記のプログラムを実行するために playground を使用します。出力結果は次のとおりです:

100

type Safety

Swift はタイプ セーフな言語です。

Swift はタイプセーフであるため、コードのコンパイル時に型チェックを実行し、不一致の型をエラーとしてマークします。これにより、開発の早い段階でバグを発見して修正できます。

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 は型推論を使用して適切な型を選択します。

たとえば、新しい定数に値 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
1バイト -127〜127
1バイト 0〜255
4バイト-2147483648 宛先 2147483647
4バイト0〜4294967295
8バイト-9223372036854775808〜9223372036854775807
8バイト0〜18446744073709551615
4バイト 1.2E- 38 ~ 3.4E+38 (約 6 桁)
8 バイト2.3E-308 ~ 1.7E+308 (約 15 桁)