词典不识别键类型

时间:2014-07-08 09:15:02

标签: ios xcode dictionary swift

使用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”

1 个答案:

答案 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}}。