2014-06-08 41 views
4

不能将表达式的类型'CGRect'转换为'NSCopying!'类型在迅速 我想在swift文件中实现键盘通知。无法将表达式的类型'CGRect'转换为'NSCopying!'类型in swift

//发送UIKeyboardDidShowNotification时调用。

func keyboardWasShown(aNotification :NSNotification) 
    { 
     var info = aNotification.userInfo 
     var kRect:CGRect = info[UIKeyboardFrameBeginUserInfoKey] as CGRect 
     var kbSize:CGSize = kRect.size 

但不知道为什么我得到这个错误?

回答

6

您不能将您要从字典中提取的值向下翻到CGRect。它是一个NSValue对象,因此您可以使用CGRectValue()轻松获取该值。这应该让你得到你想要的。

func keyboardWasShown(aNotification: NSNotification) { 
    let info = aNotification.userInfo 

    if let rectValue = info[UIKeyboardFrameBeginUserInfoKey] as? NSValue { 
     let kbSize:CGSize = rectValue.CGRectValue().size 
    } 
} 
3

现在需要解开用户信息,并且最好是把它放在一个if语句,因为它也可以是nil

func keyboardWasShown(aNotification: NSNotification) { 
    if let info = aNotification.userInfo { 
     var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as NSValue).CGRectValue() 
     // do something with keyboardFrame 

    } 
} 
相关问题