ios swift 获取设备名称

一直在网上看到的都是oc 的获取设备名称, 然后自己想找一个swift 方式的去获取, 然后找到了一个外国人的帖子,发现ok就转载下



extension UIDevice{

///设备型号的名称

var modelName:String{

var systemInfo =utsname()

uname(&systemInfo)

letmachineMirror =Mirror(reflecting: systemInfo.machine)

let identifier = machineMirror.children.reduce("") { identifier, elementin

guardletvalue = element.valueas?Int8wherevalue !=0else{returnidentifier }

returnidentifier +String(UnicodeScalar(UInt8(value)))

}

switchidentifier {

case"iPod5,1":return"iPod Touch 5"

case"iPod7,1":return"iPod Touch 6"

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"iPad2,1","iPad2,2","iPad2,3","iPad2,4":return"iPad 2"

case"iPad3,1","iPad3,2","iPad3,3":return"iPad 3"

case"iPad3,4","iPad3,5","iPad3,6":return"iPad 4"

case"iPad4,1","iPad4,2","iPad4,3":return"iPad Air"

case"iPad5,3","iPad5,4":return"iPad Air 2"

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"iPad6,7","iPad6,8":return"iPad Pro"

case"AppleTV5,3":return"Apple TV"

case"i386","x86_64":return"Simulator"

default:returnidentifier

}

}

}

这样扩展下 用起来也很方便

let modelName=UIDevice.currentDevice().modelName

排版不行 来张图



extensionUIDevice{

///设备型号的名称

varmodelName:String{

varsystemInfo =utsname()

uname(&systemInfo)

varidentifier =NSString(bytes: &systemInfo.machine, length:Int(_SYS_NAMELEN), encoding:NSUTF8StringEncoding)!asString//会有n多\0

// mark不支持ios 7换种写法

//var identifier = "iPhone"

//if #available(iOS 8.0, *){

//let machineMirror = Mirror(reflecting: systemInfo.machine)

//identifier = machineMirror.children.reduce("") { identifier, element in

//guard let value = element.value as? Int8 where value != 0 else { return identifier }

//return identifier + String(UnicodeScalar(UInt8(value)))

//}

//}else{

//return "iPhone"

//}

funcseach(str:String)->Bool{

ifidentifier.rangeOfString(str) !=nil{

returntrue

}

returnfalse

}

switchtrue{

caseseach("iPhone8,4"):return"iPhone SE"

caseseach("iPhone4,1"):return"iPhone 4s"

caseseach("iPhone5,1"),seach("iPhone5,2"):return"iPhone 5"

caseseach("iPhone5,3"),seach("iPhone5,4"):return"iPhone 5c"

caseseach("iPhone6,1"),seach("iPhone6,2"):return"iPhone 5s"

caseseach("iPhone7,2"):return"iPhone 6"

caseseach("iPhone7,1"):return"iPhone 6 Plus"

caseseach("iPhone8,1"):return"iPhone 6s"

caseseach("iPhone8,2"):return"iPhone 6s Plus"

caseseach("iPad2,1"),seach("iPad2,2"),seach("iPad2,3"),seach("iPad2,4"):return"iPad 2"

caseseach("iPad3,1"),seach("iPad3,2"),seach("iPad3,3"):return"iPad 3"

caseseach("iPad3,4"),seach("iPad3,5"),seach("iPad3,6"):return"iPad 4"

caseseach("iPad4,1"),seach("iPad4,2"),seach("iPad4,3"):return"iPad Air"

caseseach("iPad5,3"),seach("iPad5,4"):return"iPad Air 2"

caseseach("iPad2,5"),seach("iPad2,6"),seach("iPad2,7"):return"iPad Mini"

caseseach("iPad4,4"),seach("iPad4,5"),seach("iPad4,6"):return"iPad Mini 2"

caseseach("iPad4,7"),seach("iPad4,8"),seach("iPad4,9"):return"iPad Mini 3"

caseseach("iPad5,1"),seach("iPad5,2"):return"iPad Mini 4"

caseseach("iPad6,7"),seach("iPad6,8"):return"iPad Pro"

caseseach("iPad6,4"),seach("iPad6,3"):return"iPad Pro(9.7)"

caseseach("iPhone3,1") ,seach("iPhone3,2") ,seach("iPhone3,3"):return"iPhone 4"

caseseach("iPod5,1"):return"iPod Touch 5"

caseseach("iPod7,1"):return"iPod Touch 6"

caseseach("AppleTV5,3"):return"Apple TV"

caseseach("i386"),seach("x86_64"):return"Simulator"

//预留的默认信息

caseseach("iPod") :return"iPod"

caseseach("iPad"):return"iPad"

caseseach("iPhone"):return"iPhone"

default:

return"iPhone"

}

}

}


-----------新方式觉得还不错,代码结构更优秀 -------------

publicenumModel :String{

//case simulator = "iPhone",

caseiPod1="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",

unrecognized="iPhone"

}

publicextensionUIDevice{

publicvarmodelName:Model{

varsystemInfo = utsname()

uname(&systemInfo)

letmachineMirror = Mirror(reflecting: systemInfo.machine)

letidentifier = machineMirror.children.reduce("") { identifier, elementin

guardletvalue = element.valueas?Int8, value !=0else{returnidentifier }

returnidentifier + String(UnicodeScalar(UInt8(value)))

}

varmodelMap : [String:Model] = [

"i386": .unrecognized,

"x86_64": .unrecognized,

"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,

"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

]

ifletmodel = modelMap[identifier] {

returnmodel

}

returnModel.unrecognized

}

}


原帖网址http://stackoverflow.com/questions/26028918/ios-how-to-determine-iphone-model-in-swift

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容