字典无法识别密钥types

随着Xcode的testing版3,以下代码片段不再有效:

func keyboardWasShown (notification: NSNotification) { var info = notification.userInfo keyboardSize = info.objectForKey(UIKeyboardFrameBeginUserInfoKey).CGRectValue().size } 

在指令:

 keyboardSize = info.objectForKey(UIKeyboardFrameBeginUserInfoKey).CGRectValue().size 

XCode返回错误[NSObject:AnyObject]没有名为objectForKey的成员。

所以我改变了这样的代码:

 func keyboardWasShown (notification: NSNotification) { var info = notification.userInfo keyboardSize = info[UIKeyboardFrameBeginUserInfoKey].CGRectValue().size } 

但是XCode返回错误“string不是子typesf DictionaryIndex”

从Xcode 6 Beta 3开始, NSDictionary*现在作为[NSObject : AnyObject]从Objective-C API中导入(在发行说明中logging了此更改)。

所以你可以通过info[UIKeyboardFrameBeginUserInfoKey]来访问字典值。 这给你一个AnyObject ,你必须将其NSValueNSValue ,以便可以应用CGRectValue()

 var info = notification.userInfo let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as NSValue).CGRectValue().size 

错误消息

'String'不是'DictionaryIndex'的子types

是相当误导,你第二次尝试的问题只是失踪的演员。

更新Xcode 6.3: notification.userInfo现在是一个可选的字典,必须解包,例如使用可选的绑定。 另外强制转换操作符已经被重命名as!

 if let info = notification.userInfo { let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue().size } else { // no user info } 

我们可以强制打开字典值,因为它被loggingNSValueCGRect