Isu*_*uru 24 dictionary ios swift xcode6-beta6
我使用下面几行代码行来获取屏幕上显示的键盘框架.我已注册UIKeyboardDidShowNotification通知.
func keyboardWasShown(notification: NSNotification) {
var info = notification.userInfo
var keyboardFrame: CGRect = info.objectForKey(UIKeyboardFrameEndUserInfoKey).CGRectValue()
}
Run Code Online (Sandbox Code Playgroud)
这曾经在测试版5中工作.我下载了最新的Xcode 6版本,它是beta 6,这个错误发生在第二行.
'[NSObject:AnyObject]?' 没有名为'objectForKey'的成员
经过一些谷歌搜索,我遇到了这个解决方案.我改变了它,
var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as NSValue).CGRectValue()
Run Code Online (Sandbox Code Playgroud)
但现在似乎也已经过时了.因为我现在得到这个错误.
'[NSObject:AnyObject]?' 没有名为'下标'的成员
我无法弄清楚这个错误或如何解决它.
Mar*_*n R 41
正如Xcode 6 beta 6发行说明中所提到的,已经审计了大量的Foundation API以实现可选的一致性.这些更改将替换T!为T?或者T取决于值是否可以分别为空(或不).
notification.userInfo现在是一个可选字典:
class NSNotification : NSObject, NSCopying, NSCoding {
// ...
var userInfo: [NSObject : AnyObject]? { get }
// ...
}
Run Code Online (Sandbox Code Playgroud)
所以你必须打开它.如果你知道那userInfo不是nil那么你可以简单地使用"强制解包":
var info = notification.userInfo!
Run Code Online (Sandbox Code Playgroud)
但请注意,如果userInfo是,这将在运行时崩溃nil.
否则最好使用可选的赋值:
if let info = notification.userInfo {
var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
} else {
// no userInfo dictionary present
}
Run Code Online (Sandbox Code Playgroud)