with programming playgrounds online español development apple app ios macos swift

programming - ¿Cómo determinar el tipo de dispositivo de Swift?(OS X o iOS)



swift playgrounds iphone (4)

He implementado una biblioteca súper liviana para detectar el dispositivo usado : https://github.com/schickling/Device.swift

Puede instalarse a través de Carthage y usarse de esta manera:

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") }

Sé que Swift es relativamente nuevo, pero me preguntaba si había alguna forma de determinar el tipo de dispositivo.

(Como solía ser capaz de hacer con #define )?

Principalmente me gustaría saber cómo diferenciar OS X o iOS. No he encontrado nada sobre el tema.


Si está compilando para iOS y OS X (y quizás ahora también para watchOS y tvOS), está compilando su código al menos dos veces: una para cada plataforma. Si desea que se ejecute un código diferente en cada plataforma, desea un tiempo condicional de compilación, no una verificación de tiempo de ejecución.

Swift no tiene preprocesador, pero sí tiene directivas de compilación condicionales, y en su mayor parte, se parecen al equivalente 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

También puede usar configuraciones de compilación para probar los arm64 de arquitectura ( x86_64 , arm , arm64 , i386 ) o -D compilador (incluido el indicador DEBUG definido por las plantillas estándar de Xcode).

Consulte las Directivas de preprocesamiento sobre el uso de Swift con Cocoa y Objective-C .

(Si desea distinguir el tipo de dispositivo iOS en el que se encuentra en tiempo de ejecución, use la clase UIDevice como lo haría con ObjC. Por lo general, es más útil y seguro observar los atributos del dispositivo que son importantes para usted en lugar de un dispositivo nombre o idioma, por ejemplo, utilice rasgos y clases de tamaño para diseñar su interfaz de usuario, consulte OpenGL para las capacidades de GPU que necesita, etc.)


Desde Swift 4.2 puedes reemplazar

#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

Por

#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


var device = UIDevice.currentDevice().model

Este código funcionó para mí. Lo he implementado en el campo de texto y parte del teclado de despido. Vea abajo.

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 }