我如何获得下面的代码行进行编译?
UIView.setAnimationCurve(userInfo[UIKeyboardAnimationCurveUserInfoKey].integerValue)
现在,它给出了编译错误:
'NSNumber' is not a subtype of 'UIViewAnimationCurve'
当
userInfo[UIKeyboardAnimationCurveUserInfoKey].integerValue
声明为NSNumber
时,编译器为什么认为integerValue
是Int
?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))