Я знаю, что Swift относительно новый, но мне было интересно, есть ли способ определить тип устройства?
(Как вы могли быть с #define
)?
В основном я хотел бы знать, как отличать OS X или iOS. Я ничего не нашел по этому поводу.
Я знаю, что Swift относительно новый, но мне было интересно, есть ли способ определить тип устройства?
(Как вы могли быть с #define
)?
В основном я хотел бы знать, как отличать OS X или iOS. Я ничего не нашел по этому поводу.
Если вы создаете как 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 и т.д.)
Я реализовал суперлегкую библиотеку для обнаружения используемого устройства: 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")
}
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
}