Qui*_*ana 5 where uiscrollview ios swift
我想在用户交互期间触发基于某些UI关系的条件逻辑(在这种情况下,我想在用户滚动到a中的某个点时调用方法UIScrollView).我希望以下代码行能够合法地执行此操作,因为它具有很强的表现力:
func scrollViewDidScroll(scrollView: UIScrollView) {
guard let overlap = scrollView.contentOffset.y - 220 where overlap > 0 else {
return
}
reactToScrollOverlap(of: overlap)
}
Run Code Online (Sandbox Code Playgroud)
但是,我得到的错误是guard let需要一个可选类型.这是合理的,但我希望在这种情况下该where子句自然会引入一个可选项,因为如果算法运算错误则没有匹配值overlap.
有没有办法使用guard let(或者说if let),包含的where条款规定了Int,CGFloat或其他原始/原始类型之间算术结果的条件?
您在一个表达式中做了三件事 - 声明一个变量(常量)、为其赋值并检查其值。
在表达式中声明变量通常会令人不悦,Swift 并没有真正启用它。但有一个例外 - 选项的展开。您没有展开可选内容,因此只需将表达式正确拆分为声明和比较:
let overlap = contentOffset.y - 220
guard overlap > 0 else {
return
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用该case let模式。我不是它的忠实粉丝,但这可能就是你想要的:
guard case let overlap = contentOffset.y - 220 where overlap > 0 else {
return
}
print("overlap:", overlap)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |