2014-06-08 5 views
4

Невозможно преобразовать тип выражения 'CGRect', чтобы ввести 'NSCopying!' in 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, поэтому вы можете легко получить значение rect из него с помощью CGRectValue(). Это должно получить то, что вы хотите.

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

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

Теперь нужно разворачивать USERINFO, и это лучше всего поместить его в, если заявление, потому что это также может быть nil

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

    } 
} 
Смежные вопросы