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
2
var number = 10
number = "10" // error

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

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

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

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

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

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

4. コメントのネスト

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

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

5. セミコロン

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

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

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

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

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

7. 数字リテラル

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

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

8. 型変換

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

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

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

1
let anotherPI = 3 + 0.12159

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

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

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