しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Swift再入門3 − The Swift Programming Languageを読んでみる

この記事では「The Swift Programming Language」を1から読んだ感想とか発見を書いてみようと思います。
「The Swift Programming Language」とはSwiftの公式ドキュメントでiBooksや下ページで見る事ができます。

The Swift Programming Language (Swift 2.1): About Swift

読んだ所

今回はBasic Operatorsという項目を読みました。

The Swift Programming Language (Swift 2.1): Basic Operators

発見・感想

代入演算子

if a = bはエラーを吐くようにしたと書いてあったので確かめてみました。
if a == bの打ち間違いを防ぐ為のようです。
実際に下コードはエラー。
() is not convertible to BooleanTypeと言うエラーになりました。

var a = 1
let b = 1

if a = b {}

「Boolean同士の代入ならエラーにならない?」と思い下のコードを実行してみました。
しかし結果は先ほど同様に() is not convertible to BooleanTypeと言うエラー。

var a = true
let b = true

if a = b {}

試しに代入演算子の型を調べところ 空のTupleのようなものが返ってきていました。
なにはともあれif a = b {}という形は使えなくなっているようです。

print((a = b).dynamicType) // → ()

余りを求める

余りを求める計算は下のようになりました。
マイナスの余りを求める場合の結果はマイナスになるようです。
あと小数点もいけました。

print(5 % 3) // → 2
print(1 % 3) // → 1
print(-1 % 3) // → -1
print(7 % -5) // → 2
print(1.1 % 3.1) // → 1.1
print(-3.1 % 3) // → -0.1

if文の条件式

先程も少し触れたのですが、if文の条件式にはBool以外を入れることができないようです。
if a {}if a != nil {}のどちらがいいかの議論が不要なのが良いと思いました。

let value = 1
if value {} // これはエラー

Range演算子

Swiftではfor文を下のように書けます。

for i in 0...2 {
    print(i) // 2を含む
}
for i in 0..<2 {
    print(i) // 2を含まない
}

0...2はRangeという構造体になるようです。

print((0...2).dynamicType) // Range<Int>

実際に動かした所、下の2つは同じ結果になりました。

for i in 0...2 {
    print(i)
}

for i in Range(start: 0, end: 3) {
    print(i)
}