我如何获得下面的代码行进行编译?

UIView.setAnimationCurve(userInfo[UIKeyboardAnimationCurveUserInfoKey].integerValue)

现在,它给出了编译错误:
'NSNumber' is not a subtype of 'UIViewAnimationCurve'

userInfo[UIKeyboardAnimationCurveUserInfoKey].integerValue声明为NSNumber时,编译器为什么认为integerValueInt
class NSNumber : NSValue {
    // ...
    var integerValue: Int { get }`?
    // ...
}

我在其他枚举类型上也遇到过类似的问题。一般的解决方法是什么?

最佳答案

UIView.setAnimationCurve(UIViewAnimationCurve.fromRaw(userInfo[UIKeyboardAnimationCurveUserInfoKey].integerValue)!)

阅读更多:Swift enumerations & fromRaw()

更新

基于this answer to How to use the default iOS7 UIAnimation curve,我使用了新的基于块的动画方法+ animateWithDuration:delay:options:animations:completion:,并像这样获得UIViewAnimationOptions:
let options = UIViewAnimationOptions(UInt((userInfo[UIKeyboardAnimationCurveUserInfoKey] as NSNumber).integerValue << 16))

09-25 16:37