The Swift Programming Languageのメモ(その4)
はじめに
これは、『The Swift Programming Language』を読んだ時の個人的なメモです。なので、引用はすべて『The Swift Programming Language』から。
iTunes - ブック - Apple Inc.「The Swift Programming Language」
https://itunes.apple.com/jp/book/swift-programming-language/id881256329?mt=11
その3はこちら。
The Swift Programming Languageのメモ(その3) - 開発メモ
http://seeku.hateblo.jp/entry/2014/06/07/193435
Language Guide
Basic Operators
Arithmetic Operators
- Stringを『+』で連結することが出来るよ
- Characterも連結できるよ
Characterを連結するとStringになるよ。
Remainder Operator
- Swiftの『%』はマイナスの値で使う時、要注意だよ
Increment and Decrement Operators
- 『++』と『--』は1足したり減らしたりする処理のショートカットだよ
メモ: 細かい動作はCと同じっぽい
Unary Minus Operator
- 単項マイナス演算子を使う時は、変数との間にスペースを入れちゃ駄目だよ
Compound Assignment Operators
- 代入付きの演算子も値を返さないよ
Comparison Operators
Logical Operators
- 論理演算もよくある形だよ
- &&や||は不要な評価はしないよ
Strings and Characters
- 文字列はStringで文字はCharacterだよ
- StringはCharacterの集合だよ
- CharacterはUnicodeだよ
- 実はStringはObjective-CのNSStringへのブリッジだよ
Strings Are Value Types
Stringは値型だよ!
つまり、新しいStringを生成すると内容がコピーされるよ。
この部分はNSStringと違うよ。裏では、Swiftのコンパイラが絶対に必要な時だけコピーするように最適化してるよ
- だから、パフォーマンスも問題ないよ
Working with Characters
- 文字定数は1文字だけの文字列から作れるよ
let yenSign: Character = "¥"
Counting Characters
- 文字数を数える場合、グローバル関数のcountElements()を使うよ
NSStringのlengthも使えるけど、こっちは16bitの文字がいくつ入ってるかを返すだけだよ。
Unicode Representations of Strings
- Stringの中の文字に対して単純にUnicode文字として扱う以外に、次の3種類のアクセス方法があるよ
Collection Types
- Swiftにはコレクション型として配列と辞書があるよ
- 配列も辞書も型を認識するよ
メモ: 配列の細かい動作について、要確認
Arrays
- NSArrayやNSMutableArrayと違って、型に一致するものしか入らないよ
Array Type Shorthand Syntax
- 配列の型をちゃんと書くと『
Array<SomeType>
』になるよ - 省略して『[SomeType]』って書くことも出来るよ
Array Literals
- Swiftは型を推測してくれるから、値付きで配列を初期化する時は型を省略できるよ
var shoppingList = ["Eggs", "Milk"]
- subscript syntaxを使うと、インデックスで値にアクセスできるよ
メモ: subscript syntaxって一般的な用語?
var firstItem = shoppingList[0] // firstItem is equal to "Eggs
- subscript syntaxと範囲指定を使うと、違った範囲の値を置換できるよ
メモ: 要確認
shoppingList[4...6] = ["Bananas", "Apples"] // shoppingList now contains 6 items
- subscript syntaxで値を追加することは出来ないよ
Iterating Over an Array
- 配列の中身はfor-inループで簡単に取り出せるよ
for item in shoppingList { println(item) } // Six eggs // Milk
- インデックスと値を同時に取り出したい時はenumrate()関数が使えるよ
for (index, value) in enumerate(shoppingList) { println("Item \(index + 1): \(value)") } // Item 1: Six eggs // Item 2: Milk
Dictionaries
- NSDictionaryやNSMutableDictionaryと違って、型に一致するものしか入らないよ
辞書の型は『
Dictionary<KeyType, ValueType>
』って形になるよ
KeyTypeはキーの型、ValueTypeは値の型だよ。KeyTypeはハッシュが使えないと駄目だよ。
Swiftの標準型はハッシュが使えるよ。
Accessing and Modifying a Dictionary
- 辞書もsubscript syntaxで操作できるよ
airports["LHR"] = "London" // the airports dictionary now contains 3 items
subscript文の代わりに、updateValue(forKey:)メソッドを使うことも出来るよ
updateValue(forKey:)は古い値を返すから、値が追加されたのか変更されたのかを調べることも出来るよ。
メモ: 値の取得もupdateValue(forKey:)? 要確認updateValue(forKey:)が返すのはオプション変数だよ
- 値にnilをセットすると、辞書からキーと値のペアを削除できるよ
Mutability of Collections
- 変数に作ったコレクションは自由に変更できるよ
- 定数に作ったコレクションは変更できなくなるよ
- 辞書の場合、変更できなくなると値の変更も出来ないよ
けど、配列の場合はちょっと違うよ定数の配列の場合、サイズは変更できないけど値は変更できるよ
固定サイズの配列は、さらに最適化されるよ。
メモ: 要確認
とりあえずここまで。(2014/06/08)
配列の仕様が変わった部分を反映。(2014/07/08)
(2014/09/25 修正)