2014-06-05 6 views
25

So che Swift è relativamente nuovo, ma mi chiedevo se c'era un modo per determinare il tipo di dispositivo?Come determinare il tipo di dispositivo da Swift? (OS X o iOS)

(Come se si fosse in grado di fare con uno #define)?

Principalmente mi piacerebbe sapere come differenziare OS X o iOS. Non ho trovato nulla sull'argomento.

+0

Probabilmente vorrai avere due target, uno per la tua app per iOS e uno per la tua app per OS X. –

+1

Poiché Swift non ha un preprocessore né macro, forse puoi utilizzare i controlli di runtime. –

risposta

47

Se stai costruendo sia per iOS che per OS X (e forse ora anche per watchOS e tvOS), stai costruendo il tuo codice almeno due volte: una volta per ogni piattaforma. Se si desidera eseguire un codice diverso su ciascuna piattaforma, si desidera un condizionale build-time, non un controllo run-time.

Swift non ha alcun preprocessore, ma ha direttive di compilazione condizionale - e per la maggior parte, assomigliano all'equivalente C.

#if os(iOS) || os(watchOS) || os(tvOS) 
    let color = UIColor.redColor() 
#elseif os(OSX) 
    let color = NSColor.redColor() 
#else 
    println("OMG, it's that mythical new Apple product!!!") 
#endif 

È inoltre possibile utilizzare costruire configurazioni per testare per l'architettura (x86_64, arm, arm64, i386) o -D flag di compilazione (tra cui la bandiera DEBUG definito dai modelli Xcode standard).

Vedi Preprocessor Directives in Utilizzando Swift con cacao e Objective-C.

(Se si vuole distinguere quale tipo di dispositivo iOS sei in in fase di esecuzione, utilizzare la classe , proprio come si farebbe da objC. E 'in genere più utile e sicuro per guardare gli attributi device che sono importanti per voi piuttosto che il nome o l'idioma di un dispositivo, ad esempio utilizzare tratti e classi di dimensioni per definire l'interfaccia utente, interrogare OpenGL per le funzionalità GPU richieste, ecc.)

+6

+1 per il caso 'else'. Gestisci sempre i casi limite! :-p –

0

Ho implementato una libreria superleggera per rilevare l'utilizzo dispositivo: https://github.com/schickling/Device.swift

Può essere installato tramite Carthage e può essere utilizzato in questo modo:

import Device 

let deviceType = UIDevice.currentDevice().deviceType 

switch deviceType { 
case .IPhone6: print("Do stuff for iPhone6") 
case .IPadMini: print("Do stuff for iPad mini") 
default: print("Check other available cases of DeviceType") 
} 
+0

Fantastico! Mi piace, grazie amico. – LinusGeffarth

+0

Questo è solo per iOS, non per macOS –

0
var device = UIDevice.currentDevice().model 

Questo codice ha lavorato per me. L'ho implementato su parti di testo e tastiera che rifiutano. Vedi sotto.

func textFieldShouldBeginEditing(textField: UITextField) -> Bool 
{ 

    print(device) 

    if (textField.tag == 1 && (device == "iPhone" || device == "iPhone Simulator")) 
    { 
     var scrollPoint:CGPoint = CGPointMake(0,passwordTF.frame.origin.y/2); 
     LoginScroll!.setContentOffset(scrollPoint, animated: true); 
    } 
    else if (textField.tag == 2 && (device == "iPhone" || device == "iPhone Simulator")) 
    { 
     var scrollPoint:CGPoint = CGPointMake(0,passwordTF.frame.origin.y/1.3); 
     LoginScroll!.setContentOffset(scrollPoint, animated: true); 
    } 

    return true 

} 
+0

Questo è solo per iOS, non per macOS –

+0

In Swift 3: 'UIDevice.current.model' – Jared

Problemi correlati