可能是Swift编译器错误?

时间:2014-10-27 18:17:24

标签: uiview swift uiviewanimation

我想在swift中做最简单的动画

UIView.animateWithDuration(UINavigationControllerHideShowBarDuration, animations: { () -> Void in
        return
    })

但是我得到了参数'延迟'在电话中

任何想法?

2 个答案:

答案 0 :(得分:4)

UINavigationControllerHideShowBarDurationFloat,但是duration: 参数的类型为NSTimeIntervalDouble的别名)。所以你有 明确转换:

UIView.animateWithDuration(NSTimeInterval(UINavigationControllerHideShowBarDuration), animations: { () -> Void in
    return
})

答案 1 :(得分:1)

UIView类方法animateWithdDuration:animations:定义为:

class func animateWithDuration(_ duration: NSTimeInterval, animations animations: () -> Void) 请注意,第一个参数的类型为NSTimeInterval,而UINavigationControllerHideShowBarDuration是CGFloat类型的常量:

let UINavigationControllerHideShowBarDuration: CGFloat

检查documentation for NSTimeInterval表明在Swift中它是Double的TypeAlias

typealias NSTimeInterval = Double

因此我们必须将我们的CGFloat转换为Double以使调用工作。 我们可以通过Double(UINavigationControllerHideShowBarDuration)

从CGFloat轻松创建Double

使用NSTimeInterval(UINavigationControllerHideShowBarDuration)可能更好 确保类型签名与代码的读者匹配。