字典无法识别密钥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
,你必须将其NSValue
为NSValue
,以便可以应用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 }
我们可以强制打开字典值,因为它被logging为NSValue
的CGRect
。