2014-06-08 39 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 

    } 
} 
相關問題