Ios 在键盘上从Swift 2转换为Swift 3时出现可选错误将显示通知
我现在正在将我的应用程序转换为Swift 3,我以前用来显示键盘的功能有问题 条件绑定的初始值设定项必须具有可选类型,而不是“CGFloat” 错误出现在第三行 我上次编程已经有一段时间了,所以我不知道如何解决这个问题Ios 在键盘上从Swift 2转换为Swift 3时出现可选错误将显示通知,ios,swift,keyboard,Ios,Swift,Keyboard,我现在正在将我的应用程序转换为Swift 3,我以前用来显示键盘的功能有问题 条件绑定的初始值设定项必须具有可选类型,而不是“CGFloat” 错误出现在第三行 我上次编程已经有一段时间了,所以我不知道如何解决这个问题 func keyboardWillShow(_ sender: Notification) { if let userInfo = sender.userInfo { if let keyboardHeight = (userInfo[UI
func keyboardWillShow(_ sender: Notification) {
if let userInfo = sender.userInfo {
if let keyboardHeight = (userInfo[UIKeyboardFrameEndUserInfoKey] as AnyObject).cgRectValue.size.height {
let duration = (userInfo[UIKeyboardAnimationDurationUserInfoKey] as AnyObject).doubleValue
let edgeInsets = UIEdgeInsetsMake(0, 0, keyboardHeight, 0)
UIView.animate(withDuration: duration!, animations: { () -> Void in
self.tableView.contentInset = edgeInsets
self.tableView.scrollIndicatorInsets = edgeInsets
self.view.layoutIfNeeded()
})
}
}
}
这是我建议强制展开的罕见情况之一。您知道
userInfo
包含此信息,如果不包含此信息,您将被套住。此外,不需要通过任何对象或调用cgRectValue
;你可以在一次移动中一直投射到CGRect。所以我会写:
let keyboardHeight = (userInfo[UIKeyboardFrameEndUserInfoKey] as! CGRect).size.height
(请注意,如果,则不存在,因为我们没有执行条件绑定;我们只是强制转换,kaboom。)
[请注意,现在无需获取持续时间
,也无需调用动画
或布局
;您可以将所有这些都扔掉。我们已经在制作动画,您对内容插入集
和滚动指示器集
的更改将及时在键盘上设置动画。]这是我建议强制展开的罕见情况之一。您知道userInfo
包含此信息,如果不包含此信息,您将被套住。此外,不需要通过任何对象或调用cgRectValue
;你可以在一次移动中一直投射到CGRect。所以我会写:
let keyboardHeight = (userInfo[UIKeyboardFrameEndUserInfoKey] as! CGRect).size.height
(请注意,如果
,则不存在,因为我们没有执行条件绑定;我们只是强制转换,kaboom。)
[请注意,现在无需获取持续时间
,也无需调用动画
或布局
;您可以将所有这些都扔掉。我们已经在制作动画,您对内容插入集
和滚动指示器集
的更改将及时在键盘上设置动画。]改变
if let keyboardHeight = (userInfo[UIKeyboardFrameEndUserInfoKey] as AnyObject).cgRectValue.size.height {
到
---更新---
或
AnyObject?
之所以有效,是因为AnyObject
可以包含Optional
本身。因此,必须显式地强制转换为可选。无论是AnyObject?
还是Optional
都可以使用。更改
if let keyboardHeight = (userInfo[UIKeyboardFrameEndUserInfoKey] as AnyObject).cgRectValue.size.height {
到
---更新---
或
AnyObject?
之所以有效,是因为AnyObject
可以包含Optional
本身。因此,必须显式地强制转换为可选。AnyObject?
或Optional
都可以工作