这段代码可以获取到具体的设备版本(已更新到iPhone 6s、iPhone 6s Plus), 缺点是:采用的硬编码。具体的对应关系, 其他iPad, iPod等设备可以参考:点击打开链接 https://www.theiphonewiki.com/wiki/Models
这段代码使用了C语言中的结构体,但当在Swift中使用历史遗留的C语言库时,我们还是会面临一些问题。参考: 点击打开链接 http://www.cocoachina.com/swift/20141014/9900.html
func getDeviceVersion () -> String? {
let name = UnsafeMutablePointer<utsname>.alloc(1)
uname(name)
let machine = withUnsafePointer(&name.memory.machine, { (ptr) -> String? in
let int8Ptr = unsafeBitCast(ptr, UnsafePointer<CChar>.self)
return String.fromCString(int8Ptr)
})
name.dealloc(1)
if let deviceString = machine {
switch deviceString {
//iPhone
case "iPhone1,1": return "iPhone 1G"
case "iPhone1,2": return "iPhone 3G"
case "iPhone2,1": return "iPhone 3GS"
case "iPhone3,1", "iPhone3,2": 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,1": return "iPhone 6 Plus"
case "iPhone7,2": return "iPhone 6"
case "iPhone8,1": return "iPhone 6s"
case "iPhone8,2": return "iPhone 6s Plus"
default:
return deviceString
}
} else {
return nil
}
}
let name = UnsafeMutablePointer<utsname>.alloc(1)
uname(name)
let machine = withUnsafePointer(&name.memory.machine, { (ptr) -> String? in
let int8Ptr = unsafeBitCast(ptr, UnsafePointer<CChar>.self)
return String.fromCString(int8Ptr)
})
name.dealloc(1)
if let deviceString = machine {
switch deviceString {
//iPhone
case "iPhone1,1": return "iPhone 1G"
case "iPhone1,2": return "iPhone 3G"
case "iPhone2,1": return "iPhone 3GS"
case "iPhone3,1", "iPhone3,2": 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,1": return "iPhone 6 Plus"
case "iPhone7,2": return "iPhone 6"
case "iPhone8,1": return "iPhone 6s"
case "iPhone8,2": return "iPhone 6s Plus"
default:
return deviceString
}
} else {
return nil
}
}