2016-07-15 31 views
-1

Ich versuche, Variable für das Gerät wie in der Version zu erstellen, aber meine Kontrolle geht immer zum else Teil. Mein iOS ist 9,3Warum Präprozessordirektiven nicht funktionieren

#if os(iOS) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000 
    var addressBookRef : CNContactStore? = nil 
#else 
    var addressBookRef : ABAddressBook? = nil 
#endif 

ich dies auch als vorgeschlagen habe versucht here aber defined Einnahme nicht in Swift2.x

#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000 
    var addressBookRef : CNContactStore? = nil 
#else 
    var addressBookRef : ABAddressBook? = nil 
#endif 

Als ich zur Laufzeit bin prüft und mit Hilfe von Haltepunkten, kann ich sehen, dass meine Kontrolle geht immer zu sonst Teil und Variable addressBookRef ist vom Typ ABAddressBook.

vorschlagen bitte, was ich falsch bin

+1

Wenn Sie ** # if ** nicht vergessen add ** # endif ** – iSashok

+0

Ich mache das, tut mir leid, ich habe das hier nicht hinzugefügt. Vergessen. Lass mich updaten –

+3

Verweise http://shipster.com/swift-system-version-checking/ – Santosh

Antwort

3

tun Sie können die Version von iOS mit einer Richtlinie nicht überprüfen, müssen Sie diese zur Laufzeit überprüfen.

Wenn Sie mit iOS 8.0 oder höher können Sie verwenden, um dies:

let os = NSProcessInfo().operatingSystemVersion 
switch (os.majorVersion, os.minorVersion, os.patchVersion) { 
case (8, 0, _): 
    // 8.0.0 and < 8.1.0 
case (8, _, _): 
    // 8.1.0 and < 9.0 
case (9, _, _): 
    // 9.0.0 
default: 
    // 
} 

Sie auch UIDevice.currentDevice().systemVersion verwenden können, die auch auf iOS arbeiten 7:

switch UIDevice.currentDevice().systemVersion.compare("8.0.0", options: NSStringCompareOptions.NumericSearch) { 
case .OrderedSame, .OrderedDescending: 
    // >= 8.0 
case .OrderedAscending: 
    // < 8.0 
}