Подтвердить что ты не робот

Как определить тип устройства из Swift? (OS X или iOS)

Я знаю, что Swift относительно новый, но мне было интересно, есть ли способ определить тип устройства?

(Как вы могли быть с #define)?

В основном я хотел бы знать, как отличать OS X или iOS. Я ничего не нашел по этому поводу.

4b9b3361

Ответ 1

Если вы создаете как iOS, так и OS X (и, возможно, теперь для watchOS и tvOS тоже), вы создаете свой код как минимум дважды: один раз для каждой платформы. Если вы хотите, чтобы на каждой платформе выполнялся другой код, вам требуется условное время сборки, а не проверка времени выполнения.

У Swift нет препроцессора, но он имеет условные директивы сборки - и по большей части они выглядят как эквивалент C.

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

Вы также можете использовать конфигурации сборки для тестирования архитектуры (x86_64, arm, arm64, i386) или -D флагов компилятора (включая флаг DEBUG, определяемый стандартными шаблонами Xcode).

См. Директивы препроцессора в разделе Использование Swift с Cocoa и Objective-C.

(Если вы хотите отличить, какое устройство iOS вы используете во время выполнения, используйте класс UIDevice, как и вы, из ObjC. Обычно более полезно и безопасно смотреть на атрибуты устройства, которые важны для вы, а не имя устройства или идиома - например, используйте черты и классы размера для размещения своего пользовательского интерфейса, запросите OpenGL для требуемых возможностей GPU и т.д.)

Ответ 2

Я реализовал суперлегкую библиотеку для обнаружения используемого устройства: https://github.com/schickling/Device.swift

Он может быть установлен через Carthage и использоваться следующим образом:

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

Ответ 3

var device = UIDevice.currentDevice().model 

Этот код работал у меня. Я реализовал это на текстовом поле и клавиатуре, отклонив часть. См. Ниже.

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

}