Last active
June 29, 2016 22:50
-
-
Save kos9kus/c7da452b5c708f3bc42bac5f779c912a to your computer and use it in GitHub Desktop.
New types for UIDevice as extension to determine current type of device in Swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
typedef NS_ENUM(NSUInteger, KKOperationImageType) { | |
KKOperationImageTypeMDPI, | |
KKOperationImageTypeHDPI, | |
KKOperationImageTypeXHDPI, | |
KKOperationImageTypeXXHDPI | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// UIDeviceExtension.swift | |
// Tinkoff | |
// | |
// Created by KONSTANTIN KUSAINOV on 30/06/16. | |
// Copyright © 2016 Kos9Kus. All rights reserved. | |
// | |
import Foundation | |
import UIKit | |
public enum Model : String { | |
case simulator = "simulator/sandbox", | |
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", | |
unrecognized = "?unrecognized?" | |
} | |
public enum ModelGeneration { | |
case Generation4 | |
case Generation5 | |
case Generation6 | |
case Generation6plus | |
case GenerationTablet | |
} | |
public extension UIDevice { | |
public var type: Model { | |
var systemInfo = utsname() | |
uname(&systemInfo) | |
let modelCode = withUnsafeMutablePointer(&systemInfo.machine) { | |
ptr in String.fromCString(UnsafePointer<CChar>(ptr)) | |
} | |
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, | |
"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 | |
] | |
if let model = modelMap[String.fromCString(modelCode!)!] { | |
return model | |
} | |
return Model.unrecognized | |
} | |
public var compoundedType: ModelGeneration { | |
switch self.type { | |
case .iPhone6plus, .iPhone6Splus: | |
return .Generation6plus | |
case .iPhone6, .iPhone6S: | |
return .Generation6 | |
case .iPod5, .iPhone5, .iPhone5C, .iPhone5S: | |
return .Generation5 | |
case .iPhone4, .iPhone4S: | |
return .Generation4 | |
default: break | |
} | |
return .GenerationTablet | |
} | |
func dpiType() -> KKOperationImageType { | |
switch self.compoundedType { | |
case .Generation5: | |
return .HDPI | |
case .Generation6: | |
return .XHDPI | |
case .Generation6plus, .GenerationTablet: | |
return .XXHDPI | |
default: | |
return .MDPI | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment