我刚刚将一个项目迁移到 Swift 2.0,这个以前工作的代码现在产生了一个错误:
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return Int(UIInterfaceOrientationMask.PortraitUpsideDown.rawValue) | Int(UIInterfaceOrientationMask.Portrait.rawValue)
}
该错误表明返回类型不正确,但我尝试了几种返回它的方法,但没有运气。
无法将类型为"Int"的返回表达式转换为返回类型"UIInterfaceOrientationMask">
从 Swift 2.0 开始,位掩码被掩码值数组所取代,您的代码现在应为:
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return [.Portrait, .PortraitUpsideDown]
}
Swift 3.0 的 supportedInterfaceOrientations 有更新:
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.portrait
}
和自动旋转功能:
override var shouldAutorotate: Bool {
return true
}
Danny Bravo的回答是正确的,但我想指出另一件事。从 Swift 2.0 开始,UIInterfaceOrientationMask
(和大多数其他位掩码类型(都符合 OptionSetType
,这符合 AlgebraSetType
,这意味着您可以对 union
、intersect
等进行各种操作。
例如,在 Swift 1.2 中,代码如下:
override func supportedInterfaceOrientations() -> Int {
var orientations = UIInterfaceOrientationMask.Portrait
if FeatureManager.hasLandscape() {
orientations |= UIInterfaceOrientationMask.Landscape
}
return Int(orientations.rawValue)
}
。在 Swift 2.0 中会更像这样:
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
var orientations = UIInterfaceOrientationMask.Portrait
if FeatureManager.hasLandscape() {
orientations.insert( UIInterfaceOrientationMask.Landscape )
}
return orientations
}