開発メモ

開発関係のメモをいろいろと。たぶん。

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

  • 代入(=)は値を返さないよ!
    これで、比較(==)と間違えて条件式に使うエラーは防がれるよ。

  • 通常の四則演算はオーバーフローを許さないよ

  • C言語と違って『%』が浮動小数点型にも使えるよ

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種類のアクセス方法があるよ
    • UTF-8の集合として扱う
    • UTF-16の集合として扱う
    • Unicode scalarの集合として扱う

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 修正)