[iPhone] Swiftの変数・定数・型とは

Swift の変数と定数の規定と型の設定や、更にInt8など固定ビット数型の整数、浮動小数点型などについて確認しておきましょう。
 

Swift 4.1
Xcode 9.4.1

 

Swift

 
Swiftはバージョンによって変更が繰り返されて改善されています。最初のSwift1.0から1.1, 1.2までは慌てた人も多かったようですが、その後は年1回のメジャーなアップデートが行われています。
Objective-Cではガチガチで何より命名則が長くてほとんど覚えられない状態でしたが、徐々に簡略化され使いやすくなりました。
 

Version Release
Swift 1.0 2014/09/09
Swift 1.1 2014/10/22
Swift 1.2 2015/04/08
Swift 2.0 2015/09/21
Swift 3.0 2016/09/13
Swift 4.0 2017/09/19
Swift 5 ? Early 2019 ?

 
Swift 5 は2019年の雪がチラつく頃なのか桜なのかわかりませんが、改変のテンポが少し遅くなりました(汗
 
Swiftを始めるにあったて基本的な確認です。

  • 行でのコメントは’//’から始める
  • /* */でくくると複数行をコメントアウトできる
  • JavaやC系のような「;」は行末にはいりません
  • = の左右が空白か、空白無しか合わせる必要があります

 

 

変数: var の宣言

 
変数はその名の通り、その値が今後変わる可能性があるものです。  

 

定数: let

 
letを使うと値が変更されない定数となります。
 

 
これを変数の時のように変えようとするとエラーになります。
 

 

 
「Cannot assign to value: ‘str’ is a ‘let’ constant」とエラー内容が表示されます。
この行番号の前に現れた赤丸をクリックすると
 

 
letからvarに変えましょうと修正候補が表示されました。
ちなみに、この青いラインをクリックするとこの内容で自動で修正してくれます。
 
なぜvarとletがあるのでしょう:
早い話がvarだけでもできそうです。変更あり変更無しをまとめてvarにしたいのですが、コンパイラが「これは変更されていないからletで宣言しませんか」的なコメントが出てきます。なぜでしょう
 
バグ対策:多分letを作ることで定数のつもりで作ったものを後で変数として使ってしまうというバグを発生させないということもあるのでしょう
 
Objective-Cとの互換:Objective-Cでは例えば要素数が固定の配列「NSArray」と要素を追加削除ができる「NSMutableArray」がありましたが、これをSwiftでやる場合はletとvarで宣言を分けることになります。このような互換性を考慮したのかもしれません。

 

型: type

 
以下の型が基本的なものになります。
 

 
ところでSwiftでは型を推測してくれるため上の記述はFloat以外は簡略化できます。
 

 
逆に数値が後でわかる場合など変数を先に宣言することも可能です。この場合は型指定を明確にします。
 

 
実は数値型にはもっと細かな種類がありますが、プログラムが初めてだと今はここまで覚えておけば大丈夫でしょう。
次は、ちょっと慣れてくれば出てくるものです。

 

整数型

 
数値型には整数と小数点で表され、bit数により3種類ありましたが、その中でも整数型についてもいくつか型が規程されています

  • 整数:Int
  • 浮動小数点数:Float, Double

Intには固定ビット数でのそれぞれの整数型があり、またその符号付、符号なし型があります。

  • 符号付
    •  Int8, Int16, Int32, Int64
  • 符号なし
    • UInt8, UInt16, UInt32, UInt64

Int8の場合では、8bitの格納スペースでの整数ということですから
0000 0000 〜 1111 1111
までで表現可能な整数で符号±がつきますから
127 〜 -128
までの範囲の数値になります。
またUInt8は符号がないので
0〜 255
となります。これらをまとめると
 

最大値 最小値
Int8 128 -128
Int16 32767 -32768
Int32 2147483647 -2147483648
Int64 9223372036854775807 -9223372036854775808
Uint8 255 0
Uint16 65535 0
UInt32 4294967295 0
UInt64 18446744073709551615 0

 
これらの数値をプロパティを使って出力することができます。
 

 
ところで Int と UInt はどれだけの範囲になるのでしょうか

  • 32bit環境であれば Int32、Uint32 と同じ
  • 64bit環境であれば Int64, UInt64 となります。

Int8は8ビット幅の数値しか対応しないので、
こういう計算をすると、overflowのエラーになります。
 

 
overflow
 
これらビットタイプのIntは、bit演算、シフト演算、ローテート演算などbitでの計算や暗号化などに使われます。
ANDのビット演算の例:
 

 

浮動小数点型

 
浮動小数点型にはFloatとDoubleがありますが、これもビット数に関係します。
 

Float 32bit浮動小数点
Double 64bit浮動小数点
Float32 32bit浮動小数点:Floatのエイリアス(別名)
Float64 64bit浮動小数点:Doubleのエイリアス(別名)
Float80 80bit浮動小数点
Float96 96bit浮動小数点
CGFloat 32bit/64bit浮動小数点:環境による

 
さて、Float80とかFloat96とかありますが、これは何でしょうか?
基本的にはHardwareがこのビット数に対応していないといけないようで、主にmacOS用のようです。

CPUがARMでは対応できないということなのでiOSでは使えないようです。(iOSとmacOSが統合という噂もあります)
 
実際にどのようなケースで使われるのか、おそらく桁数が必要な数学的、あるいは物理学的な用途で使われると推測できます。ただ浮動小数点の誤差があるのと、NSDecimalNumberを使う方ことで桁数オーバーには対処はできるとは思います。
 
 
尚、これ以外にOptional型というのがありますが、これは別の機会に
 
 
References:
Int – Swift Standard Library | Apple Developer Documentation
UInt – Swift Standard Library | Apple Developer Documentation
Float – Swift Standard Library | Apple Developer Documentation
Double – Swift Standard Library | Apple Developer Documentation
String – Swift Standard Library | Apple Developer Documentation
Bool – Swift Standard Library | Apple Developer Documentation

誤字脱字、意味不明などのご意見は 謙: e-mail まで
ブックマークしておくと便利です このエントリーをはてなブックマークに追加
Twitter:




ページのトップへ戻る

シェアする

  • このエントリーをはてなブックマークに追加

フォローする