Chciałbym wyzwalać logikę warunkową opartą na pewnych relacjach UI podczas interakcji użytkownika (w tym przypadku chcę wywołać metodę, gdy użytkownik przewinie do określonego punktu w a UIScrollView
). Spodziewam się następujący wiersz kodu, aby to zrobić zgodnie z prawem, ponieważ jest to dość wyrazisty:Używanie klauzul "where" do tworzenia typów opcjonalnych w arytmetykach Swift
func scrollViewDidScroll(scrollView: UIScrollView) {
guard let overlap = scrollView.contentOffset.y - 220 where overlap > 0 else {
return
}
reactToScrollOverlap(of: overlap)
}
Jednakże pojawia się błąd, że guard let
wymaga opcjonalnego typu. Jest to uzasadnione, ale spodziewałem się w tym przypadku, że klauzula where
w naturalny sposób wprowadzi opcjonalne, ponieważ jeśli arytmetyka się nie powiedzie, nie ma zgodnej wartości overlap
.
Czy istnieje sposób na wykorzystanie guard let
(lub, alternatywnie, if let
), tak że zawarte where
klauzule przewidują warunki na wynikach arytmetycznych między Int, CGFloat lub innych prymitywnych/prymitywny podobnych typów?
Przypuszczam, że jest to najbardziej ekspresywna alternatywa, więc zaznaczę to jako odpowiedź do następnego powiadomienia (: – Quintana
po drugiej myśli, zaznaczam drugą odpowiedź jako poprawną, ponieważ chociaż masz rację i powinienem prawdopodobnie to zrobić zamiast tego, obejście udostępnione przez JAL stosuje klauzule wskazane w tytule: – Quintana
@Quintana Wypróbuj moje drugie rozwiązanie – Sulthan