字典无法识别键类型

2024-04-24

在 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 is not a subtype f DictionaryIndex”


从 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

错误信息

“String”不是“DictionaryIndex”的子类型

相当具有误导性,您第二次尝试的问题只是缺少演员阵容。

Xcode 6.3 更新: notification.userInfo is an optional现在字典必须解开,例如具有可选的绑定。 还有强制施法操作员as已更名为as!:

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

我们可以强制解开字典值,因为它是有记录的成为一个NSValue of a CGRect.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字典无法识别键类型 的相关文章

随机推荐