iPhone機(jī)型判斷(新增iPhone 11、iPhone 11 Pro、iPhone 11 Pro Max)

閑來無事,把項(xiàng)目中寫的iPhone系列設(shè)備判斷代碼copy出來以供各位開發(fā)兄弟參考參考。
設(shè)備型號官網(wǎng)查詢地址

import Foundation

extension UIDevice {
    
    @objc public enum Name: Int {
        case unknown
        case iPhone4
        case iPhone4s
        case iPhone5
        case iPhone5c
        case iPhone5s
        case iPhone6
        case iPhone6Plus
        case iPhone6s
        case iPhone6sPlus
        case iPhone7
        case iPhone7Plus
        case iPhoneSE
        case iPhone8
        case iPhone8Plus
        case iPhoneX
        case iPhoneXs
        case iPhoneXsMax
        case iPhoneXr
        case iPhone11
        case iPhone11Pro 
        case iPhone11ProMax

        case iPad2
        case iPad3
        case iPad4
        case iPadAir
        case iPadAir2
        case iPad5
        case iPad6
        case iPadMini
        case iPadMini2
        case iPadMini3
        case iPadMini4
        case iPadPro
    }
    
    @objc public static var name: Name = {
        return identifierToType(identifier: UIDevice.identifier)
    }()
    
    static func identifierToType(identifier: String) -> Name {
        switch identifier {
        case "iPhone3,1", "iPhone3,2", "iPhone3,3": return .iPhone4
        case "iPhone4,1": return .iPhone4s
        case "iPhone5,1", "iPhone5,2": return .iPhone5
        case "iPhone5,3", "iPhone5,4": return .iPhone5c
        case "iPhone6,1", "iPhone6,2": return .iPhone5s
        case "iPhone7,2": return .iPhone6
        case "iPhone7,1": return .iPhone6Plus
        case "iPhone8,1": return .iPhone6s
        case "iPhone8,2": return .iPhone6sPlus
        case "iPhone9,1", "iPhone9,3": return .iPhone7
        case "iPhone9,2", "iPhone9,4": return .iPhone7Plus
        case "iPhone8,4": return .iPhoneSE
        case "iPhone10,1", "iPhone10,4": return .iPhone8
        case "iPhone10,2", "iPhone10,5": return .iPhone8Plus
        case "iPhone10,3", "iPhone10,6": return .iPhoneX
        case "iPhone11,2": return .iPhoneXs
        case "iPhone11,4", "iPhone11,6": return .iPhoneXsMax
        case "iPhone11,8": return .iPhoneXr
        case "iPhone12,1": return .iPhone11
        case "iPhone12,3": return .iPhone11Pro
        case "iPhone12,5": return .iPhone11ProMax
        case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4": return .iPad2
        case "iPad3,1", "iPad3,2", "iPad3,3": return .iPad3
        case "iPad3,4", "iPad3,5", "iPad3,6": return .iPad4
        case "iPad4,1", "iPad4,2", "iPad4,3": return .iPadAir
        case "iPad5,3", "iPad5,4": return .iPadAir2
        case "iPad6,11", "iPad6,12": return .iPad5
        case "iPad7,5", "iPad7,6": return .iPad6
        case "iPad2,5", "iPad2,6", "iPad2,7": return .iPadMini
        case "iPad4,4", "iPad4,5", "iPad4,6": return .iPadMini2
        case "iPad4,7", "iPad4,8", "iPad4,9": return .iPadMini3
        case "iPad5,1", "iPad5,2": return .iPadMini4
        case "iPad6,3", "iPad6,4", "iPad6,7", "iPad6,8", "iPad7,1", "iPad7,2", "iPad7,3", "iPad7,4", "iPad8,1", "iPad8,2", "iPad8,3", "iPad8,4", "iPad8,5", "iPad8,6", "iPad8,7", "iPad8,8": return .iPadPro
        case "i386", "x86_64": return identifierToType(identifier: ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] ?? "unknow")
        default:
            return .unknown
        }
    }
    
    /// 獲取系統(tǒng)標(biāo)識(shí),用來判斷手機(jī)型號
    public static var identifier: String = {
        var systemInfo = utsname()
        uname(&systemInfo)
        let mirror = Mirror(reflecting: systemInfo.machine)
        
        let identifier = mirror.children.reduce("") { identifier, element in
            guard let value = element.value as? Int8, value != 0 else { return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
        }
        return identifier
    }()
    
    /// 是否是x系列的手機(jī),全面屏
    @objc public static var isXSeries: Bool = {
        let xSeries = [Name.iPhoneX, Name.iPhoneXs, Name.iPhoneXsMax, Name.iPhoneXr,Name.iPhone11,Name.iPhone11Pro,Name.iPhone11ProMax]
        if xSeries.contains(UIDevice.name) {
            return true
        }
        
        return false
    }()
    
    /// 是否是ipad
    @objc public static var isPad: Bool = {
        let pads = [Name.iPad2, Name.iPad3, Name.iPad4, Name.iPad5, Name.iPad6, Name.iPadMini, Name.iPadMini2, Name.iPadMini3, Name.iPadMini4, Name.iPadAir, Name.iPadAir2, Name.iPadPro]
        
        if pads.contains(UIDevice.name) {
            return true
        }
        
        return false
    }()
    
    /// 底部安全margin
    @objc public static var bottomMargin: CGFloat = {
        if UIDevice.isXSeries {
            return 34.0
        }
        
        return 0.0
    }()
    
    /// 頂部狀態(tài)欄高度
    @objc public static var topMargin: CGFloat = {
        if UIDevice.isXSeries {
            return 44.0
        }
        
        return 20.0
    }()
    
    /// 判斷是否是模擬器
    @objc public static var isSimulator: Bool = {
        let iden = UIDevice.identifier
        if iden == "i386" || iden == "x86_64" {
            return true
        }
        
        return false
    }()
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容