? 在Xcode 6 beta 6中没有名为“下标”的成员

在屏幕上显示时,我使用了下面几行代码来获取键盘的框架。 我已经注册到UIKeyboardDidShowNotification通知。

 func keyboardWasShown(notification: NSNotification) { var info = notification.userInfo var keyboardFrame: CGRect = info.objectForKey(UIKeyboardFrameEndUserInfoKey).CGRectValue() } 

这曾经工作在testing版5.我下载了最新的Xcode 6版本,这是beta 6,这个错误发生在第二行。

'[NSObject:AnyObject]?' 没有名为'objectForKey'的成员

谷歌search后,我遇到了这个解决scheme。 我改变了它,

 var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as NSValue).CGRectValue() 

但现在看来也是过时了。 因为我现在得到这个错误。

'[NSObject:AnyObject]?' 没有名为“下标”的成员

我不知道这个错误或如何解决它。

正如在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 }