2014-10-30 12 views
14

z zamknięciami zwykle dopisywanie [słaby własny] na mojej liście przechwytywania, a następnie wykonaj null czek na siebie:jest samo zdobyty w zagnieżdżonej funkcji

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

    functionExpectingClosure(myClosure) 
} 

Jak wykonać sprawdzanie wartości null na siebie, gdybym Korzystam zagnieżdżonej funkcji zamiast zamknięcia (lub jest nawet konieczne sprawdzenie ... czy jest to nawet dobra praktyka, aby korzystać z funkcji zagnieżdżonych tak) tj

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

    functionExpectingClosure(nestedFunction) 
} 

Odpowiedz

19

Niestety, tylko zamknięcia mają „Capture Lista "funkcji takich jak [weak self]. W przypadku funkcji zagnieżdżonych należy użyć normalnych zmiennych weak lub unowned.

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

    functionExpectingClosure(nestedFunction) 
} 
+3

Czy jest to w oficjalnej dokumentacji przez przypadek? –

+0

Wydaje się, że to prawda. Zrobiłem test, a słaby z zamknięcia nie został przekazany samemu sobie w funkcji zagnieżdżonej. Tyle dla czystego kodu. – possen

Powiązane problemy