Menu

Category

Archive

logo


The Swift Programming Language ~ The Basics [細々編]

2014-06-05 10:00:00 +0900
  • このエントリーをはてなブックマークに追加

iBooks にある "The Swift Programming Language" の勉強メモ。Objective-C と C を普段書いている自分から、ちょっと馴染みがないものを特にまとめておきます。目次は こちら

まずは、The Basics 章の細々したもの。

The Basics

1. 型セーフ

変数やコンスタントを一度、宣言するともう一度宣言することはできず、異なるタイプのデータを保存することもできない。また、コンスタントを変数へ、変数からコンスタントにもできない。

1 var number = 10
2 number = "10" // error

2. 予約語の変数/コンスタントとしての利用

Swift の予約語を変数、コンスタントの名前に使用するしかない状況の時には、名前の周りを ` (back ticks) で囲むことで使用することができる。もちろん、非推奨。

1 var `func` = "test1"
2 println(`func`)

3. 変数/コンスタントの展開

文字列の中で変数、コンスタントを使用するには、カッコでくくり、最初のカッコをバックスラッシュでエスケープすることにより、Swift が展開してくれる。

1 println("The current value of friendlyWelcome is \(friendlyWelcome)")
2 // prints "The current value of friendlyWelcome is Bonjour!”

4. コメントのネスト

C では出来なかった /**/ のコメントをネストすることができる。

1 // this comment works well
2 /* hi /* wow */ yeah */

5. セミコロン

各ステートメントの終わりにセミコロンはいらない。でも、ステートメントを同じ行に書くときには必須。

1 var number1 = 10; var number2 = 20; println(number1)
2 var number3 = 30, number4 = 40; println(number3)

6. 浮動小数点数のデフォルトは Double

Swift 型推論をしてくれると同時に型に対して厳格です。上で見たように、一度、Int と宣言した変数に String 等の異なる型を保存することはエラーを吐きます。浮動小数点数の型推論は、明示的になされていなければ、Double です。

1 var dNum :Double = 3.14 // Double
2 var fNum :Float  = 3.14 // Float
3 dNum             = fNum // error
4 var d2Num        = 3.14 // Double
5 var f2Num :Float = 3.14 // Float
6 d2Num            = f2Num // error

7. 数字リテラル

数字リテラルにおいて、可読性を高めるために以下のような書き方ができる。

1 let padding0Double  = 000001234.456
2 let oneMillion      = 1_000_000
3 let justOverMillion = 1_000_000.000_000_1

8. 型変換

変数とコンスタントにおいての、浮動小数点と整数の変換は全て明示的に行う。Type(value) と、Type の initializer が受け取ることができる型の value を使用して、新しいオブジェクトを作成する

1 // from int to float
2 let three = 3
3 let point = 0.14159
4 let pi    = three + point // error
5 let pi    = Double(three) + point // ok
6 // from float to int
7 let integerPI = Int(pi)

これは、リテラルとは文脈が違う。下記のコードは ok。なぜならリテラルは型をまだ持っていないから。

1 let anotherPI = 3 + 0.12159

9. Int は、条件として使えない

Swift の型セーフのため、C のように 0 が false でそれ以外が true のように数値を条件分岐の直接使われない。下記のコードはエラー。

1 let i = 1
2 if i {
3   // err
4 }