Próbowałem wykonać wiele badań dotyczących zrozumienia cykli zatrzymania. Nie mogę jednak znaleźć niczego na moich przykładach. Wiem, że jeśli ustawię właściwość na zamknięcie, wówczas zachodzi cykl zatrzymania i trzeba użyć słabego lub niezmienionego. Ale mam 2 przykłady, które chciałbym wiedzieć, jeśli są one wykonane poprawnie: Z góry dziękuję, próbowałem sprawdzić, czy są one na stackoverflow już, ale nie można znaleźć niczego.Swift Zachowaj cykle i zamknięcia
Proste animacje
UIView.transitionWithView(self, duration: 5, options: .TransitionCrossDissolve, animations: { [weak self] in
self?.setNeedsDisplay()
return
}, completion: nil)
animacji z tablicy
for imageView in self.townImages {
UIView.transitionWithView(imageView, duration: 0.3, options: .TransitionCrossDissolve, animations: {() -> Void in
imageView.image = UIImage(named: self.getImages()[count++])
}, completion: nil)
}
W obu tych przykładach self
to podklasa UIView
. Chciałbym tylko wiedzieć, że robię to poprawnie lub jeśli powinienem używać również imageView jako słabego odniesienia. Dzięki.
Czy to oznacza, że tworzy on tylko cykl zatrzymania, jeśli moja klasa zawiera odniesienie do bloku? lub czy metoda "UIView.transitionWithView" również spowodowałaby utworzenie cyklu zatrzymania? Innymi słowy, jeśli któraś z klas miała odniesienie do bloku, to tworzyłaby cykl zatrzymania? – smitt04
również powrót w pierwszym przykładzie był taki, że w przypadku, gdy w zamknięciu zostało wykonane tylko jedno oświadczenie, to automatycznie zwracana jest ta wartość iw tym przypadku zamknięcie oczekiwało wartości zwracanej przez Void, więc używam instrukcji return, aby zwrócić pustkę, a nie wynik 'self? .setNeedsDisplay()' – smitt04
Tak, dziwne, ale prawdziwe: w Swift * musisz * potrzebować zwrotu w tym przypadku. Jedna z dziwactw różnych reguł języka dla zamknięć jednej deklaracji. (A obecna wersja kompilatora zgłasza nieistotny i całkowicie mylący komunikat o błędzie, jeśli go tam nie ma ...) –