Vorrei attivare la logica condizionale basata su determinate relazioni dell'interfaccia utente durante l'interazione dell'utente (in questo caso, voglio chiamare un metodo quando un utente scorre a un certo punto in a UIScrollView
). Mi aspetterei la seguente riga di codice per fare questo legalmente, dal momento che è molto espressiva:Uso delle clausole "where" per produrre tipi facoltativi in Aritmetica Swift
func scrollViewDidScroll(scrollView: UIScrollView) {
guard let overlap = scrollView.contentOffset.y - 220 where overlap > 0 else {
return
}
reactToScrollOverlap(of: overlap)
}
Tuttavia, ottengo l'errore che il guard let
richiede un tipo di optional. Questo è ragionevole, ma in questo caso mi aspettavo che la clausola where
introdurrebbe naturalmente un optional, poiché se l'aritmetica funziona in modo errato, non c'è alcun valore corrispondente di overlap
.
C'è un modo per utilizzare guard let
(o, in alternativa, if let
) tale che comprendeva where
clausole prevedono condizioni sui risultati dell'aritmetica tra Int, CGFloat, o altri tipi primitivi/primitivo-come?
Suppongo che questa sia l'alternativa più espressiva, quindi contrassegnerò questa come risposta fino a nuovo avviso (: – Quintana
ripensandoci, ho contrassegnato l'altra come corretta perché anche se hai ragione e dovrei farlo probabilmente, la soluzione alternativa fornita da JAL utilizza le clausole where indicate nel titolo – Quintana
@Quintana Prova la mia seconda soluzione – Sulthan