開発メモ

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

The Swift Programming Languageのメモ(その11)

はじめに

これは、『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

その10はこちら。

The Swift Programming Languageのメモ(その10) - 開発メモ
http://seeku.hateblo.jp/entry/2014/06/14/235451


Language Reference

Lexical Structure

Keywords

メモ: ちゃんと、文脈依存キーワードが使ってある

メモ: 『Self』とは? 要確認

Types

Function Type

  • 関数型は、関数やメソッドやクロージャを区別する型のことだよ
  • 関数型には『autoclosure』属性が使えるよ
  • これは、引数が『()』で式を返す関数型に使えるよ
  • 『autoclosure』が付いた関数型は、自動でクロージャに置き換わるよ
    メモ: この解釈であってる? 要確認
func simpleAssert(condition: @autoclosure () -> Bool, message: String) {
    if !condition() {
        println(message)
    }
}
let testNumber = 5
simpleAssert(testNumber % 2 == 0, "testNumber isn't an even number.")
// prints "testNumber isn't an even number.

Optional Type

  • 変数名の後ろに『?』を書くのはシンタックスシュガーだよ
    内部的には『Optional<T>』に変換されてるよ。

Implicitly Unwrapped Optional Type

  • 変数名の後ろに『!』を書くのもシンタックスシュガーだよ
    内部的には『ImplicitlyUnwrappedOptional<T>』に変換されてるよ。

Metatype Type

  • クラスや構造体や列挙型のメタタイプは、後ろに『.Type』を付けたものになるよ
  • プロトコルの場合は『.Protocol』を付けたものだよ
  • 『.dynamicType』を使うと、インスタンスから型を取得することが出来るよ

Expressions

Closure Expression

  • キャプチャリストを使って、変数に別名を付けることが出来るよ
// Weak capture of "self.parent" as "parent"
myFunction { [weak parent = self.parent] in print(parent!.title) }

Declarations

Module Scope

  • モジュールスコープは、Swiftの同じモジュールにあるソースコードで見えるスコープだよ
  • Swiftのソースコードでトップレベルに書いてある文や式や宣言のことだよ
  • 変数や定数や他の宣言も、トップレベルに書いてあれば、同じモジュールで使えるよ

メモ: 具体的なモジュールの作り方は? 要確認
メモ: namespace的な要素はこれだけ?

Import Declaration

  • モジュールを取り込むと、他のファイルで宣言されたシンボルも使えるようになるよ
import module
  • どのシンボルを取り込むか、制限することも出来るよ

メモ: typealiasで別名を付けて取り込むことが出来る? 要確認

Initializer Declaration

  • イニシャライザーに『required』属性をつけると、サブクラスでの継承が必須になるよ

Attributes

  • 属性は、名前の前に『@』に続けて書くよ
    つまり、『@objc protocol』なら属性の正しい名前は『objc』だよ。
    メモ: 要確認

Declaration Attributes

  • exported
    他のモジュールで使えるようにする属性だよ。
  • noreturn
    関数とメソッドでだけ使える属性で、呼び出し元に帰ってこないことを示すよ。
  • objc
    Objective-Cからも使えるようにする属性だよ。Objective-Cで使う時の名前を指定するためにも使われるよ。

メモ: いろいろまとめて要確認

Pattern

Expression Pattern

  • switch文のcaseでマッチングに使われるのは『~=』演算子だよ
  • 逆に言うと『~=』をオーバライドすればマッチングの動作を変えられるよ

これにて終了。
(2014/06/15 作成)
(2014/09/25 修正)