LoginSignup
10
11

More than 5 years have passed since last update.

Swiftの@lazyの使い道

Last updated at Posted at 2014-07-08

遅延初期化来たか。ということで、実験と応用を考えてみます。

lazyなし

class Sub {
    init() {
        println("initialized!!")
    }
}

class foo {
    var lazySub = {
        Sub()
    }()
}

コンソールには'initialized!!が2回出力される'

lazyあり

class Sub {
    init() {
        println("initialized!!")
    }
}

class foo {
    @lazy var lazySub = {
        Sub()
    }()
}

コンソールには'initialized!!'が一回だけ出力される

何をやっているか

class foo {
    @lazy var lazySub = create()

    func create() {
        return Sub()
    }
}

これを無名関数化 + 実行しているだけ。

どこで使えるか

@property lazySub

- (Sub *)lazySub {
    if (_lazySub == nil) {
        _lazySub = [Sub new];
    }

    return _lazySub;
}

こういうよく見るやつに使えるかなーと。

※このやり方だとクロージャ内でselfを使おうとするとエラーになる。。。原因調査中です。

追記

ちなみにこんなのをやってた記事を見たんですけど、普通に何回でも実行されるのになんで@lazyが書けるのか不明...

class foo {
    @lazy var lazySub: () -> Sub = {
        return Sub()
    }
}

// 変数にクロージャをバインドしているが、当然呼べば呼ぶだけ実行される。
10
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11