Je sais que Swift est relativement nouveau, mais je me demandais s’il existait un moyen de déterminer le type d’appareil?
(Comme vous pouviez faire avec un #define
)?
Je voudrais surtout savoir comment différencier OS X ou iOS. Je n'ai rien trouvé sur le sujet.
Si vous compilez pour iOS et OS X (et peut-être maintenant pour watchOS et tvOS également), vous construisez votre code au moins deux fois: une fois pour chaque plate-forme. Si vous souhaitez exécuter un code différent sur chaque plate-forme, vous souhaitez une vérification conditionnelle au moment de la construction, pas une vérification à l'exécution.
Swift n'a pas de préprocesseur, mais il a des directives de construction conditionnelles - et la plupart du temps, elles ressemblent à l'équivalent en 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
Vous pouvez également utiliser des configurations de construction pour tester l'architecture (x86_64
, arm
, arm64
, i386
) ou -D
du compilateur (y compris l'indicateur DEBUG
défini par les modèles Xcode standard).
Voir Directives du préprocesseur in Utilisation de Swift avec Cocoa et Objective-C.
(Si vous souhaitez distinguer le type de périphérique iOS sur lequel vous vous trouvez au moment de l'exécution, utilisez la classe UIDevice
comme vous le feriez avec ObjC. Il est généralement plus utile et plus sûr de consulter les attributs de périphérique importants pour vous plutôt que de périphérique. nom ou idiome - par exemple, utilisez des traits et des classes de taille pour structurer votre interface utilisateur, demandez à OpenGL les fonctionnalités GPU dont vous avez besoin, etc.)
Depuis Swift 4.2, vous pouvez remplacer
#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
Par
#if canImport(UIKit)
let color = UIColor.redColor()
#elseif os(OSX)
let color = NSColor.redColor()
#else
#error("OMG, it's that mythical new Apple product!!!")
#endif