31

クロージャーを使用すると、通常[weak self]、キャプチャ リストに追加してから、自分自身に対して null チェックを行います。

func myInstanceMethod()
{
    let myClosure =
    {
       [weak self] (result : Bool) in
       if let this = self
       { 
           this.anotherInstanceMethod()
       }
    }   

    functionExpectingClosure(myClosure)
}

クロージャーの代わりにネストされた関数を使用している場合にnull チェックを実行するにはどうselfすればよいですか (または、チェックが必要なのか... または、このようなネストされた関数を使用することをお勧めします) ie

func myInstanceMethod()
{
    func nestedFunction(result : Bool)
    {
        anotherInstanceMethod()
    }

    functionExpectingClosure(nestedFunction)
}
4

2 に答える 2

36

残念ながら、 のような「キャプチャ リスト」機能を備えているのはクロージャのみです[weak self]。ネストされた関数の場合、通常weakまたはunowned変数を使用する必要があります。

func myInstanceMethod() {
    weak var _self = self
    func nestedFunction(result : Bool) {
        _self?.anotherInstanceMethod()
    }

    functionExpectingClosure(nestedFunction)
}
于 2014-10-31T07:34:39.153 に答える