[NSObject:AnyObject]?Xcode 6 beta 6中没有名为“下标”的成员错误

发布于 2021-01-31 23:57:04

当屏幕上显示键盘时,我使用以下几行代码来获取键盘的框架。我已经注册了UIKeyboardDidShowNotification通知。

func keyboardWasShown(notification: NSNotification) {
    var info = notification.userInfo
    var keyboardFrame: CGRect = info.objectForKey(UIKeyboardFrameEndUserInfoKey).CGRectValue()
}

这曾经在beta 5中起作用。我下载了最新的Xcode 6版本beta 6,此错误发生在第二行。

“ [NSObject:AnyObject]?” 没有名为“ objectForKey”的成员

经过一番谷歌搜索,我遇到了这个解决方案。我就这样改变了

var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as NSValue).CGRectValue()

但是现在看来这也已经过时了。因为我现在收到此错误。

“ [NSObject:AnyObject]?” 没有名为“下标”的成员

我无法弄清楚该错误或如何解决。

关注者
0
被浏览
229
1 个回答
  • 面试哥
    面试哥 2021-01-31
    为面试而生,有面试问题,就找面试哥。

    正如Xcode 6 beta 6发行说明中提到的那样,已经对大量FoundationAPI进行了审核,以了解可选的一致性。这些更改分别T!T?或替换,或者分别T取决于该值是否可以为null。

    notification.userInfo现在是 可选 词典:

    class NSNotification : NSObject, NSCopying, NSCoding {
        // ...
        var userInfo: [NSObject : AnyObject]? { get }
        // ...
    }
    

    所以你必须拆开它。如果你 知道userInfo是不是nil,那么你可以简单地使用“强制展开”:

    var info = notification.userInfo!
    

    但请注意,如果userInfo为,则会在运行时崩溃nil

    否则最好使用可选的分配:

    if let info = notification.userInfo {
        var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
    } else {
        // no userInfo dictionary present
    }
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看