如何从Swift确定设备类型?(OS X或iOS)

2020/12/16 00:11 · ios ·  · 0评论

我知道Swift相对较新,但是我想知道是否有一种确定设备类型的方法?

(就像您以前可以使用#define)?

我主要想知道如何区分OS X或iOS。我对此事一无所获。

如果要同时针对iOS和macOS(以及也可能对watchOS和tvOS)进行构建,则至少要编译两次:每个平台一次。如果要在每个平台上执行不同的代码,则需要构建时有条件的检查,而不是运行时检查。

Swift没有预处理器,但确实有条件的构建指令-在大多数情况下,它们看起来像C等效项。

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

您还可以使用构建配置来测试架构(x86_64armarm64i386),目标环境(的iOS模拟器或Mac催化剂),或-D编译器标志(包括DEBUG通过标准的Xcode模板中定义的标志)。别以为这些事情会合而为一-苹果公司宣布在arm64上推出macOS,预计在2020年上市,因此arm64并不意味着iOS,而iOS Simulator并不意味着x86,等等。

请参阅Swift编程语言编译器控制语句

(如果您想区分运行时使用的是哪种iOS设备,请UIDevice像从ObjC一样使用此类。通常,查看对您而言重要的设备属性(而不是设备名称)更为有用和安全。或习惯用语-例如,使用特征和大小类来布置UI,检查Metal是否需要您的GPU功能,等等。

这应该为您提供所有用例:

#if os(OSX)
    print("macOS")
#elseif os(watchOS)
    print("watchOS")
#elseif os(tvOS)
    print("tvOS")
#elseif os(iOS)
    #if targetEnvironment(macCatalyst)
        print("macOS - Catalyst")
    #else
        print("iOS")
    #endif
#endif

从Swift 4.2开始,您可以替换

#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

通过

#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

为Mac Catalyst更新。现在,您还可以使用以下命令确定是iOS还是Mac Catalyst:

let color: UIColor
#if targetEnvironment(macCatalyst)
color = .systemRed
#else
color = .systemBlue
#endif

例如。

var device = UIDevice.currentDevice().model 

这段代码对我有用。我已经在textfield和键盘消除部分实现了这一点。见下文。

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

}
本文地址:http://ios.askforanswer.com/ruhecongswiftquedingshebeileixingos-xhuoios.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!