2015-09-10 21 views
18

Właśnie migracji projekt Swift 2.0 i ten kod poprzednio pracujący obecnie produkuje błąd:supportedInterfaceOrientations() Błąd w Swift 2.0

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

Błąd wskazuje typy zwracane są nieprawidłowe ale już próbowałem kilka sposobów zwrotu tego bez powodzenia.

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

Odpowiedz

44

Od Swift 2.0 bit maskowania otrzymuje za pomocą tablic wartości maski, kod powinien teraz przeczytać:

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

Zadziałało wielkie dzięki! Wszystkie błędy, które dostaję po migracji, są powiązane z maską, więc to naprawdę przydatne informacje. –

+0

niesamowite, czy możesz przyjąć odpowiedź jako poprawną? –

+0

Oczywiście, nadal muszę poczekać kilka minut, zanim pozwolę sobie na akceptację. –

4
odpowiedź

Danny Bravo jest poprawna, ale chciałem podkreślić jedną inną rzecz. Jak Swift 2.0 UIInterfaceOrientationMask (i większości innych typów maska ​​bitowa) są zgodne z OptionSetType, który jest zgodny z AlgebraSetType, dzięki czemu można zrobić wszystkie rodzaje operacji na tych, jak union, intersect itp

Na przykład w Swift 1.2 Kod tak:

override func supportedInterfaceOrientations() -> Int { 
    var orientations = UIInterfaceOrientationMask.Portrait 
    if FeatureManager.hasLandscape() { 
     orientations |= UIInterfaceOrientationMask.Landscape 
    } 

    return Int(orientations.rawValue) 
} 

... będzie więcej jak ten w Swift 2.0:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
    var orientations = UIInterfaceOrientationMask.Portrait 
    if FeatureManager.hasLandscape() { 
     orientations.insert(UIInterfaceOrientationMask.Landscape) 
    } 

    return orientations 
} 
+0

Dzięki za dodatkowe informacje. Zawsze dobrze wiedzieć więcej. –

+0

Po prostu ciekawa: czy ta dziwaczna wspaniałość przenosiła się na Swift 3, czy też zmieniła się ponownie? Dzięki! –

5

jest aktualizacja supportedInterfaceOrientations dla Swift 3.0:

override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
    return UIInterfaceOrientationMask.portrait 
} 

A funkcja autorotating:

override var shouldAutorotate: Bool { 
    return true 
} 
Powiązane problemy