And*_*ath 12 xcode dictionary ios swift
使用Xcode的beta 3,以下代码不再起作用:
func keyboardWasShown (notification: NSNotification)
{
var info = notification.userInfo
keyboardSize = info.objectForKey(UIKeyboardFrameBeginUserInfoKey).CGRectValue().size
}
Run Code Online (Sandbox Code Playgroud)
在指示:
keyboardSize = info.objectForKey(UIKeyboardFrameBeginUserInfoKey).CGRectValue().size
Run Code Online (Sandbox Code Playgroud)
XCode返回错误[NSObject:AnyObject]没有名为objectForKey的成员.
所以我改变了这样的代码:
func keyboardWasShown (notification: NSNotification)
{
var info = notification.userInfo
keyboardSize = info[UIKeyboardFrameBeginUserInfoKey].CGRectValue().size
}
Run Code Online (Sandbox Code Playgroud)
但是XCode返回错误"String不是子类型f DictionaryIndex"
Mar*_*n R 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
Run Code Online (Sandbox Code Playgroud)
错误消息
'String'不是'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
}
Run Code Online (Sandbox Code Playgroud)
我们可以强制打开字典值,因为它被记录
为NSValuea CGRect.
| 归档时间: |
|
| 查看次数: |
2917 次 |
| 最近记录: |