2017-06-07 4 views
16

Ich möchte 9 Xcode verwenden iOS 11 Code zu meinem Projekt hinzuzufügen, während die Möglichkeit, halten das Projekt mit Xcode 8, die nur iOS 10.Was ist das Swift-Äquivalent von Objective-Cs "#ifdef __IPHONE_11_0"?

unterstützt I dieser Richtlinie durch die Verwendung eines Vorprozessors tun können In Objective-C

zu kompilieren um zu prüfen, ob __IPHONE_11_0 definiert ist. Welche wird den Code ausblenden, wenn ich mit einem Base-SDK früher als iOS kompilieren bin 11. So:

#ifdef __IPHONE_11_0 
    if (@available(iOS 11.0, *)) { 
     self.navigationController.navigationBar.prefersLargeTitles = YES; 
    } 
#endif 

Gibt es eine Möglichkeit in Swift, das zu tun?

if #available(iOS 11.0, *) funktioniert nicht, weil das eine Laufzeitprüfung ist.

Antwort

13

Das iOS 11 SDK kommt mit Swift 3.2 (oder Swift 4), so dass Sie eine Swift Versionsprüfung verwenden, um das Gleiche zu erreichen:

#if swift(>=3.2) 
    if #available(iOS 11.0, *) { 
     … 
    } 
#endif 
+0

Wie dies in einem oBJ-C-Projekt verwendet werden? Der Compilerfehler ist "Funktionsähnliches Makro 'swift' ist nicht definiert"? Danke – Jerome

+0

@Jerome Es kann nicht. –

5

Dies ist die Lösung von Apple vorgeschlagen ist:

if #available(iOS 11.0, *) { 
    // iOS 11 specific stuff here 
} else { 
    // non iOS 11 stuff here 
} 

verweisen auf this resources (siehe Video auf Marke 06.50 für weitere Details)

+2

Dies ist für das Innere einer Methode. Ich denke, Op versucht herauszufinden, was man für Methoden tut, die nur iOS 11 oder höher sind. – SAHM