2015-04-20 21 views
5

mam jakiś kod Objective-C, które chciałbym, aby zrozumieć, aby zrobić to samo w SWIFT:Co to jest odpowiednik dispatch_block_t w swift?

dispatch_block_t adjustTooltipVisibility = ^{ 
    self.tooltipView.alpha = _tooltipVisible ? 1.0 : 0.0; 
    self.tooltipTipView.alpha = _tooltipVisible ? 1.0 : 0.0; 
}; 

tej pory wszystko, co mogłem dowiedzieć się o dispatch_block_t było to, że jest on wykorzystywany w dispatch_after w Swift jako zamknięcie. Więc mogę zrozumieć, że jednak nie rozumiem korzystania z niego, tak jak to w Objective-C i jak przekształcić ten kod do kodu szybkiego

Odpowiedz

6

dispatch_block_t to alias typu dla zamknięcia Void -> Void. Swift (od wersji 1.2) nie wyprowadza ich zbyt dobrze, więc musisz zadeklarować typ. Będziesz musiał również jawnie odwoływać się do self, aby uzyskać dostęp do właściwości instancji, a także upewnić się, że nie tworzysz cyklu odniesienia. Deklarowanie self jako weak w zamknięciu jest bezpieczne podejście:

let adjustTooltipVisibility: dispatch_block_t = { [weak self] in 
    if self?._tooltipVisible == true { 
     self?.tooltipView.alpha = 1 
     self?.tooltipTipView.alpha = 1 
    } else { 
     self?.tooltipView.alpha = 0 
     self?.tooltipTipView.alpha = 0 
    } 
} 
+0

Jaki jest pożytek z tego przypadku? – Nico

+0

Używanie słabego ja jest bardzo złe. Słabe odniesienie może zniknąć w dowolnym momencie, w tym podczas wysyłania wiadomości. Znacznie lepiej zrobić inicjał, jeśli (pozwól sobie na siebie). – gnasher729

+0

Dlaczego ten "dispatch_block_t" jest używany? Jaka jest różnica, jeśli go nie używam? – Nico

1
let adjustTooltipVisibility:Void->Void = { 
    self.tooltipView.alpha = _tooltipVisible ? 1.0 : 0.0 
    self.tooltipTipView.alpha = _tooltipVisible ? 1.0 : 0.0 
}; 

Jeśli będzie coś co prowadzi do zatrzymywania cyklu, należy używaj nieuznanego przechwytywania dla siebie. Typ bloku to Void-> Void

+1

Znak^jest błąd copy-paste, a siebie i rodzaj wnioskowania należy dodać rzeczywiście. Zaktualizuję wynik. – user3349433

Powiązane problemy