解包选项可以通过几种不同的方式完成,但我发现自己只使用一种方式。
func keyboardDidShow(keyboardRect: CGRect?) {
var height: CGFloat?
if let rectHeight = keyboardRect?.height {
height = rectHeight
} else {
height = 0
}
let insets = UIEdgeInsets(top: 0, left: 0, bottom: height!, right: 0)
///...clipping rest of method
}
你如何减少这里的行数?
答案 0 :(得分:6)
在此特定示例中,您可以使用nil-coalescing operator ??
:
func keyboardDidShow(keyboardRect: CGRect?) {
let height = keyboardRect?.height ?? 0
let insets = UIEdgeInsets(top: 0, left: 0, bottom: height, right: 0)
///...clipping rest of method
}
答案 1 :(得分:1)
高度不需要是可选的,因为它总是会得到一个值。使用最新的编译器,不需要它是var。你可以有一个常量,它将在if的两个分支上初始化。当然??在这种情况下,运算符工作正常。