2015-09-10 2 views
18

Я просто мигрировали проект Swift 2.0, и это ранее работающий код теперь производит ошибку:supportedInterfaceOrientations() ошибка в Swift 2,0

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

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

Cannot convert return expression of type 'Int' to return type 'UIInterfaceOrientationMask'

ответ

44

В Свифта 2.0 бит маскирования заменяется использованием массивов значений маски, ваш код должен выглядеть так:

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

Это работало большое спасибо! Все ошибки, которые я получаю после миграции, связаны с битовой маской, так что это действительно полезная информация. –

+0

Удивительно, можете ли вы принять ответ как правильный? –

+0

Конечно, еще нужно подождать пару минут, прежде чем это позволит мне принять. –

4
ответ

Дэнни Браво правильно, но я хотел бы указать на одну другую вещь. По 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 
} 
+0

Спасибо за дополнительную информацию. Всегда хорошо знать больше. –

+0

Просто любопытно: эта необычная удивительность перенесла на Swift 3, или она снова изменилась? Благодаря! –

5

Существует обновление supportedInterfaceOrientations для Swift 3.0:

override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
    return UIInterfaceOrientationMask.portrait 
} 

И функция autorotating:

override var shouldAutorotate: Bool { 
    return true 
} 
Смежные вопросы