ios UIDevice currentDevice 模型可能的值
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/14411075/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
UIDevice currentDevice model possible values
提问by Fergal
What are all the possible values returned by [[UIDevice currentDevice] model];
? It isn't documented.
返回的所有可能值是[[UIDevice currentDevice] model];
什么?它没有 记录。
回答by Inder Kumar Rathore
The possible vales are iPod touch
, iPhone
, iPhone Simulator
, iPad
, iPad Simulator
可能的值是iPod touch
, iPhone
, iPhone Simulator
, iPad
,iPad Simulator
If you want to know which hardware iOS
is ruining on like iPhone3
, iPhone4
, iPhone5
etc below is the code for that
如果你想知道哪些硬件iOS
是像毁了iPhone3
,iPhone4
,iPhone5
等下面是该代码
NOTE:The below code may not contain all device's string, I'm with other guys are maintaining the same code on GitHubso please take the latest code from there
注意:下面的代码可能不包含所有设备的字符串,我和其他人在GitHub 上维护相同的代码,所以请从那里获取最新的代码
Objective-C : GitHub/DeviceUtil
Objective-C : GitHub/DeviceUtil
Swift : GitHub/DeviceGuru
斯威夫特:GitHub/DeviceGuru
#include <sys/types.h>
#include <sys/sysctl.h>
- (NSString*)hardwareDescription {
NSString *hardware = [self hardwareString];
if ([hardware isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
if ([hardware isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([hardware isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
if ([hardware isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([hardware isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
if ([hardware isEqualToString:@"iPod1,1"]) return @"iPodTouch 1G";
if ([hardware isEqualToString:@"iPod2,1"]) return @"iPodTouch 2G";
if ([hardware isEqualToString:@"iPad1,1"]) return @"iPad";
if ([hardware isEqualToString:@"iPad2,6"]) return @"iPad Mini";
if ([hardware isEqualToString:@"iPad4,1"]) return @"iPad Air WIFI";
//there are lots of other strings too, checkout the github repo
//link is given at the top of this answer
if ([hardware isEqualToString:@"i386"]) return @"Simulator";
if ([hardware isEqualToString:@"x86_64"]) return @"Simulator";
return nil;
}
- (NSString*)hardwareString {
size_t size = 100;
char *hw_machine = malloc(size);
int name[] = {CTL_HW,HW_MACHINE};
sysctl(name, 2, hw_machine, &size, NULL, 0);
NSString *hardware = [NSString stringWithUTF8String:hw_machine];
free(hw_machine);
return hardware;
}
回答by javienegas
I just did a test on iPod Touch, iPhone, Phone Retina, iPhone 5, iPad, iPad Retina and iPad Mini. So this is my conclusion:
我刚刚在 iPod Touch、iPhone、Phone Retina、iPhone 5、iPad、iPad Retina 和 iPad Mini 上进行了测试。所以这是我的结论:
iPod touch
iPhone
iPad
On simulators - this could be useful if you're a developer working on features that sometimes do not work at all on simulators - you'll get these values:
在模拟器上 - 如果您是开发有时在模拟器上根本不起作用的功能的开发人员,这可能很有用 - 您将获得以下值:
iPhone Simulator
iPad Simulator
回答by iDesireJustice
I believe the best answer to explain(something which wasn't written here) Is to say that the value itself is a String value. and the possible answers are string e.g: "iPhone","iPad" and etc..
我相信解释(这里没有写的东西)的最佳答案是说值本身是一个字符串值。并且可能的答案是字符串,例如:“iPhone”、“iPad”等。
回答by Jon Vogel
None of these answers are extendable for new model numbers. Here is an enumeration:
这些答案都不能扩展到新型号。这是一个枚举:
public enum DeviceType {
case iPad(String?)
case iPhone(String?)
case simulator(String?)
case appleTV(String?)
case unknown
}
And Extension I wrote that I think is a little cleaner and a little more extendable for when new model number come out.
和我写的扩展,我认为当新型号出现时,它更简洁,更具扩展性。
extension UIDevice {
public static func getDevice() -> DeviceType {
var info = utsname()
uname(&info)
let machineMirror = Mirror(reflecting: info.machine)
let code = machineMirror.children.reduce("") { identifier, element in
guard let value = element.value as? Int8, value != 0 else {
return identifier
}
return identifier + String(UnicodeScalar(UInt8(value)))
}
if code.lowercased().range(of: "ipad") != nil {
if let range = code.lowercased().range(of: "ipad") {
var mutate = code
mutate.removeSubrange(range)
return .iPad(mutate)
}else{
return .iPad(nil)
}
}else if code.lowercased().range(of: "iphone") != nil {
if let range = code.lowercased().range(of: "iphone") {
var mutate = code
mutate.removeSubrange(range)
return .iPhone(mutate)
}else{
return .iPhone(nil)
}
}else if code.lowercased().range(of: "i386") != nil || code.lowercased().range(of: "x86_64") != nil{
return .simulator(code)
}else if code.lowercased().range(of: "appletv") != nil {
if let range = code.lowercased().range(of: "appletv") {
var mutate = code
mutate.removeSubrange(range)
return .appleTV(mutate)
}else{
return .appleTV(nil)
}
}else{
return .unknown
}
}
}