SupportInterfaceOrientations() ошибка в Swift 2.0

Я просто перенес проект в Swift 2.0, и этот ранее рабочий код вызывает ошибку:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {  
        return Int(UIInterfaceOrientationMask.PortraitUpsideDown.rawValue) | Int(UIInterfaceOrientationMask.Portrait.rawValue)  
    } 

Ошибка указывает, что типы возвращаемых данных неверны, но я попробовал несколько способов вернуть это без везения.

Невозможно преобразовать возвращаемое выражение типа 'Int' для возврата типа 'UIInterfaceOrientationMask'

Ответы

Ответ 1

Как и в Swift 2.0, маскирование бит заменяется массивами значений маски, теперь ваш код должен читать:

 override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    return [.Portrait, .PortraitUpsideDown]
}

Ответ 2

Существует обновление поддержкиInterfaceOrientations для Swift 3.0:

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {  
    return UIInterfaceOrientationMask.portrait  
}

И функция авторотизации:

override var shouldAutorotate: Bool {
    return true
}

Ответ 3

Ответ Дэнни Браво правильный, но я хотел указать еще одну вещь. Начиная с 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
}