使用Xcode的beta 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不是子类型f DictionaryIndex”
答案 0 :(得分:18)
从Xcode 6 Beta 3开始,NSDictionary*
现在从Objective-C API导入为[NSObject : AnyObject]
(此更改记录在发行说明中)。
因此,您可以使用info[UIKeyboardFrameBeginUserInfoKey]
访问字典值。
这会将AnyObject
提供给NSValue
,以便CGRectValue()
可以应用:
var info = notification.userInfo
let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as NSValue).CGRectValue().size
错误消息
'字符串'不是' DictionaryIndex'
的子类型
非常具有误导性,第二次尝试的问题只是失踪演员。
Xcode 6.3更新: notification.userInfo
现在是可选字典,必须解包,例如带可选绑定。
此外,强制转换操作符as
已重命名为as!
:
if let info = notification.userInfo {
let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue().size
} else {
// no user info
}
我们可以强制打开字典值,因为它是记录的
成为NSValue
的{{1}}。