ある知財部員 兼 (元)技術者 の日記

企業の知財部員の日記です。
趣味でプログラミングをしており、備忘録として覚えたことを投稿するかもしれません。

Swift文法基礎(8) 型安全性(Type Safety)と型推論(Type Inference)

2023-08-20 08:25:19 | iOSプログラミング(Swift)

Swiftは型安全(type-safe)な言語だそうです。値の型が明示的になるように実装しなくてはいけません。

ある変数の型がStringであった場合、その変数にIntの値を代入することはできません。

型チェックはコンパイル時に行われ、誤りがある場合はコンパイルエラーとなります。


Swiftは型チェックを行いますが、必ずしも型宣言が必要なわけではなく、適宜、型推論(type inference)を行なってくれます。

定数や変数の初期値によって型推論が行われます。

let a = 5 // aはIntと型推論されます。

Swiftでは、浮動小数点数に対しては、必ずDoubleと型推論します。Floatにはなりません。

let x = 4 + 0.1234567 //xはDoubleと型推論されます。

 


Swift文法基礎(7) 浮動小数点数

2023-08-19 22:51:37 | iOSプログラミング(Swift)

浮動小数点数を表す型はDoubleとFloatがあります。

  • Doubleは64ビットの浮動小数点数です。
  • Floatは32ビットの浮動小数点数です。

Doubleは少なくとも小数点15桁、Floatは高々 小数点6桁の精度です。

状況に応じて使い分けることになりますが、どちらでも良い場合はDoubleを使用するのが良いでしょう。


var f:Float ,d:Double

f = 1.1234567890123456789

d = 1.1234567890123456789

print(" Float=\(f), Double=\(d)")


以下、Console出力です。

Float=1.1234568, Double=1.1234567890123457


Amazon prime musicの不満

2023-08-19 19:25:39 | 日記

Amazon music unlimitedの契約はしていません。

Amazon prime musicで曲を選択しても、再生順はランダムだということは承知していますが、

「コンバトラーV」を選択すると、English version (そんなのがあるとは!)は再生されますが、

日本語版は再生されません。

 

子供の頃にテレビで観ていたので懐かしくて聴きたかったのですが。。。

 

他の曲では、順番はバラバラでも「再生されない」ということはないのですが、これだけは再生されたことがありません。

ざんねん。。。


Swift文法基礎(6) 整数 Int, UInt他

2023-08-19 14:03:39 | iOSプログラミング(Swift)

整数には符号付(負、0、正)と符号なし(0以上)があります。

var d, e, f: Int

d = -3

e = 0

f = 234

var g, h, i: UInt

g = 0

h = -5 // コンパイルエラー

i = 22


整数は8,16,32,64ビットで指定できます。
さらに、それぞれのビットにおける最大値、最小値を取得できます。

 

var a1:UInt8,a2:UInt8, b1:UInt16,b2:UInt16, c1:UInt32,c2:UInt32, d1:UInt64,d2:UInt64

var e1:Int8,e2:Int8, f1:Int16,f2:Int16, g1:Int32,g2:Int32, h1:Int64,h2:Int64

 

a1 = UInt8.max

a2 = UInt8.min

b1 = UInt16.max

b2 = UInt16.min

c1 = UInt32.max

c2 = UInt32.min

d1 = UInt64.max

d2 = UInt64.min

 

print(" UInt8.max = \(a1)\n UInt8.min = \(a2)\n UInt16.max = \(b1)\n UInt16.min = \(b2)\n UInt32.max = \(c1)\n UInt32.min = \(c2)\n UInt64.max = \(d1)\n UInt64.min = \(d2)")

 

e1 = Int8.max

e2 = Int8.min

f1 = Int16.max

f2 = Int16.min

g1 = Int32.max

g2 = Int32.min

h1 = Int64.max

h2 = Int64.min

 

print(" Int8.max = \(e1)\n Int8.min = \(e2)\n Int16.max = \(f1)\n Int16.min = \(f2)\n Int32.max = \(g1)\n Int32.min = \(g2)\n Int64.max = \(h1)\n Int64.min = \(h2)")



以下、Consoleの出力です。

 UInt8.max = 255

 UInt8.min = 0

 UInt16.max = 65535

 UInt16.min = 0

 UInt32.max = 4294967295

 UInt32.min = 0

 UInt64.max = 18446744073709551615

 UInt64.min = 0

 Int8.max = 127

 Int8.min = -128

 Int16.max = 32767

 Int16.min = -32768

 Int32.max = 2147483647

 Int32.min = -2147483648

 Int64.max = 9223372036854775807

 Int64.min = -9223372036854775808


なお、32ビットOS上ではIntはInt32、UIntはUInt32と同じサイズ、64ビットOS上ではIntはInt64、UintはUint64と同じサイズになります。

var int:Int,uint:UInt

int = Int64.max /*コンパイルエラーになる*/

uint= UInt64.max /*コンパイルエラーになる*/

int = Int(Int64.max) /*OK*/

uint = UInt(UInt64.max)/*OK*/

print(int,uint)

以下、Console出力です。

9223372036854775807 18446744073709551615