しめ鯖日記

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

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

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

The Swift Programming Language: About Swift

読んだ所

今回は下のAbout SwiftA Swift Tourを読みました。

The Swift Programming Language: About Swift
The Swift Programming Language: A Swift Tour

発見・感想

型の変換

下のようにDoubleで宣言するとIntからDoubleに変換してくれる模様です。

let double: Double = 70
print(double) // → Double型が入っている

CGFloatもOKでした。

let float: CGFloat = 70
print(float)

もちろんStringへの変換は不可

let string: String = 70 // これはエラーになる
print(string)

IntをStringに変換する際は下のように明示的にやる必要があります。

let string: String = String(70)
print(string)

配列とディクショナリの宣言

時々忘れてしまうのですが配列とディクショナリは下のように宣言します。

今回初めて知ったのですがdynamicTypeというメソッドでクラスの型を取る事ができるようです。

let arr = [String]()
let dic = [String: String]()

print(arr.dynamicType) // → Array<String>
print(dic.dynamicType) // → Dictionary<String, String>

意外だったのですが[]という書き方はArrayでなくNSArrayになりました。
混乱するので極力[]は避けた方が良さそうですね。

var arr = []
print(arr.dynamicType) // → __NSArray0
arr.mutableCopy().addObject("") // → 実際に`NSMutableArray`にしかない`addObject`メソッドも呼べました

var arr2 = [String]()
print(arr2.dynamicType) // → Array<String>

let dic = [:] // → ディクショナリも同じ結果でした
print(dic.dynamicType) // → __NSDictionary0

中身を入れるとArrayになってくれました。
このルールは混乱しますね。

var arr = [""]
print(arr.dynamicType) // → Array<String>

まとめ

今回は入門的なところを読んだのですがかなり学びが多くて面白かったです。
宣言時の型等は仕事をしていると意識しないので勉強しなおしてよかったと思います。