1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 
  | public enum Model : String {     case iPod1          = "iPod 1",     iPod2          = "iPod 2",     iPod3          = "iPod 3",     iPod4          = "iPod 4",     iPod5          = "iPod 5",     iPad2          = "iPad 2",     iPad3          = "iPad 3",     iPad4          = "iPad 4",     iPhone4        = "iPhone 4",     iPhone4S       = "iPhone 4S",     iPhone5        = "iPhone 5",     iPhone5S       = "iPhone 5S",     iPhone5C       = "iPhone 5C",     iPadMini1      = "iPad Mini 1",     iPadMini2      = "iPad Mini 2",     iPadMini3      = "iPad Mini 3",     iPadAir1       = "iPad Air 1",     iPadAir2       = "iPad Air 2",     iPhone6        = "iPhone 6",     iPhone6plus    = "iPhone 6 Plus",     iPhone6S       = "iPhone 6S",     iPhone6Splus   = "iPhone 6S Plus",     iPhoneSE       = "iPhone SE",     iPhone7        = "iPhone 7",     iPhone7plus    = "iPhone 7 Plus",     iPadPro9        = "iPad Pro(9.7)",     iPadPro        = "iPad Pro",     AppleTV        = "Apple TV",     iPad           =  "iPad",     iPod           = "iPod",     simulator      = "simulator",     iPhone         = "iPhone",     unrecognized   = "unrecognized"           } public extension UIDevice {     public var modelName: Model {         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)))         }         var modelMap : [ String : Model ] = [             "i386"      : .simulator,             "x86_64"    : .simulator,             "iPod1,1"   : .iPod1,             "iPod2,1"   : .iPod2,             "iPod3,1"   : .iPod3,             "iPod4,1"   : .iPod4,             "iPod5,1"   : .iPod5,             "iPad2,1"   : .iPad2,             "iPad2,2"   : .iPad2,             "iPad2,3"   : .iPad2,             "iPad2,4"   : .iPad2,             "iPad2,5"   : .iPadMini1,             "iPad2,6"   : .iPadMini1,             "iPad2,7"   : .iPadMini1,             "iPhone3,1" : .iPhone4,             "iPhone3,2" : .iPhone4,             "iPhone3,3" : .iPhone4,             "iPhone4,1" : .iPhone4S,             "iPhone5,1" : .iPhone5,             "iPhone5,2" : .iPhone5,             "iPhone5,3" : .iPhone5C,             "iPhone5,4" : .iPhone5C,             "iPad3,1"   : .iPad3,             "iPad3,2"   : .iPad3,             "iPad3,3"   : .iPad3,             "iPad3,4"   : .iPad4,             "iPad3,5"   : .iPad4,             "iPad3,6"   : .iPad4,             "iPad6,4" : .iPadPro9,             "iPad6,3" : .iPadPro9,             "iPad6,7" : .iPadPro,             "iPad6,8" : .iPadPro,                              "iPhone6,1" : .iPhone5S,             "iPhone6,2" : .iPhone5S,             "iPad4,1"   : .iPadAir1,             "iPad4,2"   : .iPadAir2,             "iPad4,4"   : .iPadMini2,             "iPad4,5"   : .iPadMini2,             "iPad4,6"   : .iPadMini2,             "iPad4,7"   : .iPadMini3,             "iPad4,8"   : .iPadMini3,             "iPad4,9"   : .iPadMini3,             "iPhone7,1" : .iPhone6plus,             "iPhone7,2" : .iPhone6,             "iPhone8,1" : .iPhone6S,             "iPhone8,2" : .iPhone6Splus,             "iPhone9,1" : .iPhone7,             "iPhone9,3" : .iPhone7,             "iPhone9,2" : .iPhone7plus,             "iPhone9,4" : .iPhone7plus                      ]                  if let model = modelMap[identifier] {             return model         }         if identifier.range(of: "iPad") != nil{            return Model.iPad         }         if identifier.range(of: "iPod") != nil{             return Model.iPod         }         if identifier.range(of: "iPhone") != nil{             return Model.iPhone         }         return Model.unrecognized     } } 
  |