当前位置: 首页 > 面试题库 >

如何确定当前的iPhone /设备型号?

高溪叠
2023-03-14
问题内容

有没有办法在Swift中获取设备型号名称(iPhone 4S,iPhone 5,iPhone 5S等)?

我知道有一个名为的属性,UIDevice.currentDevice().model但它仅返回设备类型(iPod
touch,iPhone,iPad,iPhone Simulator等)。

我也知道使用此方法可以轻松在Objective-C中完成:

#import <sys/utsname.h>

struct utsname systemInfo;
uname(&systemInfo);

NSString* deviceModel = [NSString stringWithCString:systemInfo.machine
                          encoding:NSUTF8StringEncoding];

但是我正在用Swift开发我的iPhone应用程序,所以有人可以帮我用等效的方法来解决这个问题吗?


问题答案:

我在上做了这个“ pure
Swift”扩展UIDevice

此版本适用于Swift 2或更高版本。
如果您使用的是较早版本,请使用我的答案的较旧版本。

如果您正在寻找更优雅的解决方案,则可以使用我DeviceKit在GitHub上发布的µ-framework(也可以通过CocoaPods,Carthage和Swift
Package Manager获得)。

这是代码:

import UIKit

public extension UIDevice {

    static let modelName: String = {
        var systemInfo = utsname()
        uname(&systemInfo)
        let machineMirror = Mirror(reflecting: systemInfo.machine)
        let identifier = machineMirror.children.reduce("") { identifier, element in
            guard let value = element.value as? Int8, value != 0 else { return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
        }

        func mapToDevice(identifier: String) -> String { // swiftlint:disable:this cyclomatic_complexity
            #if os(iOS)
            switch identifier {
            case "iPod5,1":                                 return "iPod touch (5th generation)"
            case "iPod7,1":                                 return "iPod touch (6th generation)"
            case "iPod9,1":                                 return "iPod touch (7th generation)"
            case "iPhone3,1", "iPhone3,2", "iPhone3,3":     return "iPhone 4"
            case "iPhone4,1":                               return "iPhone 4s"
            case "iPhone5,1", "iPhone5,2":                  return "iPhone 5"
            case "iPhone5,3", "iPhone5,4":                  return "iPhone 5c"
            case "iPhone6,1", "iPhone6,2":                  return "iPhone 5s"
            case "iPhone7,2":                               return "iPhone 6"
            case "iPhone7,1":                               return "iPhone 6 Plus"
            case "iPhone8,1":                               return "iPhone 6s"
            case "iPhone8,2":                               return "iPhone 6s Plus"
            case "iPhone8,4":                               return "iPhone SE"
            case "iPhone9,1", "iPhone9,3":                  return "iPhone 7"
            case "iPhone9,2", "iPhone9,4":                  return "iPhone 7 Plus"
            case "iPhone10,1", "iPhone10,4":                return "iPhone 8"
            case "iPhone10,2", "iPhone10,5":                return "iPhone 8 Plus"
            case "iPhone10,3", "iPhone10,6":                return "iPhone X"
            case "iPhone11,2":                              return "iPhone XS"
            case "iPhone11,4", "iPhone11,6":                return "iPhone XS Max"
            case "iPhone11,8":                              return "iPhone XR"
            case "iPhone12,1":                              return "iPhone 11"
            case "iPhone12,3":                              return "iPhone 11 Pro"
            case "iPhone12,5":                              return "iPhone 11 Pro Max"
            case "iPhone12,8":                              return "iPhone SE (2nd generation)"
            case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
            case "iPad3,1", "iPad3,2", "iPad3,3":           return "iPad (3rd generation)"
            case "iPad3,4", "iPad3,5", "iPad3,6":           return "iPad (4th generation)"
            case "iPad6,11", "iPad6,12":                    return "iPad (5th generation)"
            case "iPad7,5", "iPad7,6":                      return "iPad (6th generation)"
            case "iPad7,11", "iPad7,12":                    return "iPad (7th generation)"
            case "iPad4,1", "iPad4,2", "iPad4,3":           return "iPad Air"
            case "iPad5,3", "iPad5,4":                      return "iPad Air 2"
            case "iPad11,4", "iPad11,5":                    return "iPad Air (3rd generation)"
            case "iPad2,5", "iPad2,6", "iPad2,7":           return "iPad mini"
            case "iPad4,4", "iPad4,5", "iPad4,6":           return "iPad mini 2"
            case "iPad4,7", "iPad4,8", "iPad4,9":           return "iPad mini 3"
            case "iPad5,1", "iPad5,2":                      return "iPad mini 4"
            case "iPad11,1", "iPad11,2":                    return "iPad mini (5th generation)"
            case "iPad6,3", "iPad6,4":                      return "iPad Pro (9.7-inch)"
            case "iPad7,3", "iPad7,4":                      return "iPad Pro (10.5-inch)"
            case "iPad8,1", "iPad8,2", "iPad8,3", "iPad8,4":return "iPad Pro (11-inch) (1st generation)"
            case "iPad8,9", "iPad8,10":                     return "iPad Pro (11-inch) (2nd generation)"
            case "iPad6,7", "iPad6,8":                      return "iPad Pro (12.9-inch) (1st generation)"
            case "iPad7,1", "iPad7,2":                      return "iPad Pro (12.9-inch) (2nd generation)"
            case "iPad8,5", "iPad8,6", "iPad8,7", "iPad8,8":return "iPad Pro (12.9-inch) (3rd generation)"
            case "iPad8,11", "iPad8,12":                    return "iPad Pro (12.9-inch) (4th generation)"
            case "AppleTV5,3":                              return "Apple TV"
            case "AppleTV6,2":                              return "Apple TV 4K"
            case "AudioAccessory1,1":                       return "HomePod"
            case "i386", "x86_64":                          return "Simulator \(mapToDevice(identifier: ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] ?? "iOS"))"
            default:                                        return identifier
            }
            #elseif os(tvOS)
            switch identifier {
            case "AppleTV5,3": return "Apple TV 4"
            case "AppleTV6,2": return "Apple TV 4K"
            case "i386", "x86_64": return "Simulator \(mapToDevice(identifier: ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] ?? "tvOS"))"
            default: return identifier
            }
            #endif
        }

        return mapToDevice(identifier: identifier)
    }()

}

您这样称呼它:

let modelName = UIDevice.modelName

对于真实设备,它返回例如“ iPad Pro 9.7英寸”,对于模拟器,它返回“模拟器” +模拟器标识符,例如“ Simulator iPad Pro
9.7英寸”



 类似资料:
  • 问题内容: 我创建了一个android应用,在此应用中,用户可以保存一些任务。这些任务将保存在设备中,并且当用户上线时,任务将同步到服务器。用户保存任务时,我需要知道正确的日期和时间。诸如或返回设备时间之类的代码,如果设备时间不正确,则任务会以错误的日期保存。这个应用程式必须离线运作,这一点很重要。并且由于该应用程序的冗长性,用户可能有意更改设备时间。对不起,我的英语不好。 问题答案: 因此,我最

  • 问题内容: 我知道Swift相对较新,但是我想知道是否有一种确定设备类型的方法? (就像您以前能够使用)? 我主要想知道如何区分OS X或iOS。我对此事一无所获。 问题答案: 如果要同时针对iOS和macOS(以及也可能对watchOS和tvOS)进行构建,则至少要编译两次:每个平台一次。如果要在每个平台上执行不同的代码,则需要构建时有条件的检查,而不是运行时检查。 Swift没有预处理器,但它

  • 本文向大家介绍jquery判断iPhone、Android设备类型,包括了jquery判断iPhone、Android设备类型的使用技巧和注意事项,需要的朋友参考一下 最近做了一版微信宣传页,通过JQ来判断设备,并进行下载  微信内置浏览器对下载链接进行了屏蔽,所以先进行判断,如果是微信内置浏览器,则跳转应用宝链接,如果不是,则判断是iPhone/Adroid/PC 并进行跳转  代码如下: 以上

  • 我正在开发一个应用程序使用Flutter。但是我被一种情况所困扰,Android设备有默认的后退按钮,而iPhone没有。所以当我在iOS设备上打开应用程序时,需要显示后退按钮。此外,如果有任何其他内置功能可用,请指导我。

  • 问题内容: 我想看看确定python中当前脚本目录的最佳方法是什么? 我发现由于调用python代码的方式很多,很难找到一个好的解决方案。 这里有一些问题: 如果脚本与执行没有定义 仅在模块中定义 用例: ./myfile.py python myfile.py ./somedir/myfile.py python somedir/myfile.py execfile(‘myfile.py’) (

  • 问题内容: 如何确定Linux中Shell的当前CPU使用率? 例如,我得到如下的平均负载: 输出: 问题答案: Linux没有任何提供当前CPU使用率的系统变量。取而代之的是,您必须阅读几次:各行中的每一列都给出了总的CPU时间,并且您必须对其进行后续读取才能获得百分比。请参阅本文档以了解各列的含义。