しめ鯖日記

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

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

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

The Swift Programming Language: About Swift

読んだ所

今回は下のThe Basicsを読みました。

The Swift Programming Language: The Basics

発見・感想

Int関連

Intは32ビット環境ではInt32になって64ビット環境ではInt64になるらしいです。
符号なしのUIntも同様でした。

Int.max // → 9223372036854775807
Int64.max // → 9223372036854775807
Int32.max // → 2147483647

Int32Int32.maxより大きい値を入れたらちゃんとエラーになってくれました。

// Integer literal overflowa when stored into "Int32"エラーになる
var int: Int32 = 2147483648

下のように2進数・8進数・16進数のリテラルも用意してありました。

print(0b10001)
print(0o21)
print(0x11)

あとは下のようなリテラルもあるようでした。

100e2 // → 100 x 10 ** 2 => 10000
1_000 // → 1000
0.000_1 // → 0.0001
0xFp2 // → 15 x 2 ** 2 => 60

typealias

typealiasはクラスのエイリアスを作ってくれます。

typealias MyInt = Int
print(MyInt.max) // 9223372036854775807

Tuple

Tupleは会社でも少し使ってますがとても便利です。
モック用のダミーデータを作りたいけどクラスを定義するのがめんどくさい時に使ってます。

.0.1でアクセスできるのは初めて知りました。

let tuple = (1, "aaa")
print(tuple.dynamicType) // (Int, String)
print(tuple.0) // 1
print(tuple.1) // aaa

下のように名前付きTupleも定義できます。

let tuple = (int: 1, str: "aaa")
print(tuple.dynamicType) // (Int, String)
print(tuple.0)
print(tuple.1)
print(tuple.int)
print(tuple.str)

名前付きと名前なしは同じ型のようです。
下のように代入する事ができました。

var tuple = (int: 1, str: "aaa")
tuple = (2, "aaa")

Tupleの個々の値は下のようにも取り出せました。
メソッドの戻り値を複数持たせたい時に便利そうです。

let tuple = (2, "aaa")
let (value0, value1) = tuple

全部の値を使わない場合は_を使うと良さそうです。

let tuple = (1, 2, 3)
let (value0, value1, _) = tuple

assert

assertという機能もあるようです。
これはテストコードではなく通常のコード中に埋め込むようです。

assertメソッド内の第一引数がfalseになるとアプリが落ちます。
デバッグ時だけ有効なようで、releaseビルドではfalseでも落ちませんでした。

let age = -3
assert(age >= 0, "A person's age cannot be less than zero")

変数名

Swiftでは変数名に全角文字が使えます。

let π = 3.14159
let 你好 = "你好世界"
let ?? = "dogcow"
        
print(π)
print(你好)
print(??)