我使用下面几行代码行来获取屏幕上显示的键盘框架。我已注册UIKeyboardDidShowNotification
通知。
func keyboardWasShown(notification: NSNotification) {
var info = notification.userInfo
var keyboardFrame: CGRect = info.objectForKey(UIKeyboardFrameEndUserInfoKey).CGRectValue()
}
这曾经在测试版5中工作。我下载了最新的Xcode 6版本,它是beta 6,这个错误发生在第二行。
' [NSObject:AnyObject]?'没有名为' objectForKey'
的成员经过一些谷歌搜索,我遇到了this解决方案。我改变了它,
var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as NSValue).CGRectValue()
但似乎现在也已经过时了。因为我现在收到这个错误。
' [NSObject:AnyObject]?'没有名为'下标'
的成员我无法弄清楚这个错误或如何解决它。
答案 0 :(得分:41)
正如Xcode 6 beta 6发行说明中所提到的,已经审核了大量的Foundation API以确保可选的一致性。
这些更改会将T!
替换为T?
或T
,具体取决于值是否可以为空(或不)。
notification.userInfo
现在是可选字典:
class NSNotification : NSObject, NSCopying, NSCoding {
// ...
var userInfo: [NSObject : AnyObject]? { get }
// ...
}
所以你必须打开它。如果您知道 userInfo
不是nil
那么
你可以简单地使用“强制解包”:
var info = notification.userInfo!
但请注意,如果userInfo
为nil
,则会在运行时崩溃。
否则最好使用可选的作业:
if let info = notification.userInfo {
var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
} else {
// no userInfo dictionary present
}