Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 600 - Multiple Managed Object Contextsチュートリアル 5

ちょっと複雑なCore Dataチュートリアルを勉強してます。

www.raywenderlich.com

CoreDataStack.swifのコードを詳しくみています。

昨日の記事も確認する必要があります。NSFileManagerクラスの持っている「copyItemAtURL」メソッドのコピー先の定数「url」をコードしている部分をチェックします。

lazy var psc: NSPersistentStoreCoordinator = {
  let coordinator = NSPersistentStoreCoordinator(
    managedObjectModel: self.managedObjectModel)
  let url =
  self.applicationDocumentsDirectory
    .URLByAppendingPathComponent(self.seedName + ".sqlite")
 //
 // 昨日から開設しているコードは、この格納遅延型プロパティ
 // 「psc」のクロージャのコードです。
 // 最後に「}()」が出てきます。

ここで使用されている「lazy」はlazy stored propertyです。今までに何度か説明はしています。しかし、しっかり理解しているとは言いがたいため、「詳解 Swift 改訂版」を調べました。

lazy stored propertyは「遅延格納型プロパティ」と訳されています。今まで「レイジー」なんて直接読んでいましたが、萩原先生に敬意を表し「遅延格納型プロパティ」を使います。

遅延格納型プロパティ(lazy stored property)

  • 初期値に一般式も使えますが、遅延評価するための意味のある関数やメソッドを呼び出したり、クロージャで評価できます。
  • クラス定義と構造体定義の内部にしか定義できません。
  • インスタンス生成後に値が変化するため変数(var)として宣言します。
  • できるだけ型推論を使用せず明記します。

この教科書のいいところは、どういう場合に使用すればいいのかヒントを書いているところです。iOS開発のGUI部品(UIKit)を使う場合、画面に画像を表示する場合でも、インスタンス生成時に画像ファイルのパスだけ指定して、実際画面に表示させるまで画像データの読み込みを遅延させると起動時間を大幅に改善させられます。

細切れになりますが、今日はここまで。