? 在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 }