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