ddo*_*lce 4 objective-c ios swift
回到Objective-C,我在constants.h文件中定义了以下宏:
#define IS_IPHONE5 (([[UIScreen mainScreen] bounds].size.height-568)?NO:YES)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
#define IS_IOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7)
#define APP_DEFAULT_FONT_FACE @"HelveticaNeue-Light"
#define APP_DEFAULT_FONT_FACE_THIN @"HelveticaNeue-UltraLight"
#define APP_VERSION @"1.2"
Run Code Online (Sandbox Code Playgroud)
我开始玩Swift,我注意到这些东西不再起作用了.那么现在我应该如何定义这些宏,并检测设备属于哪个系列?
如果Swift没有宏,那么这样做的语法是什么?
Swi*_*y89 14
我倾向于在每个项目中使用这三个结构:
struct ScreenSize {
static let SCREEN_WIDTH = UIScreen.mainScreen().bounds.size.width
static let SCREEN_HEIGHT = UIScreen.mainScreen().bounds.size.height
static let SCREEN_MAX_LENGTH = max(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
static let SCREEN_MIN_LENGTH = min(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
}
struct DeviceType {
static let IS_IPHONE_4_OR_LESS = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0
static let IS_IPHONE_5 = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0
static let IS_IPHONE_6 = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0
static let IS_IPHONE_6P = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0
static let IS_IPAD = UIDevice.currentDevice().userInterfaceIdiom == .Pad && ScreenSize.SCREEN_MAX_LENGTH == 1024.0
}
struct iOSVersion {
static let SYS_VERSION_FLOAT = (UIDevice.currentDevice().systemVersion as NSString).floatValue
static let iOS7 = (iOSVersion.SYS_VERSION_FLOAT < 8.0 && iOSVersion.SYS_VERSION_FLOAT >= 7.0)
static let iOS8 = (iOSVersion.SYS_VERSION_FLOAT >= 8.0 && iOSVersion.SYS_VERSION_FLOAT < 9.0)
static let iOS9 = (iOSVersion.SYS_VERSION_FLOAT >= 9.0 && iOSVersion.SYS_VERSION_FLOAT < 10.0)
}
Run Code Online (Sandbox Code Playgroud)
我以下列方式使用它们:
if DeviceType.IS_IPHONE_6 {
//iPhone 6 specific code goes here.
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,定义这些常量的最简单方法似乎是使用let关键字.宏在Swift中不可用,因此在这种情况下你必须使用常量(在这种情况下,无论如何在性能方面可能更好):
let IS_IPHONE5 = fabs(UIScreen.mainScreen().bounds.size.height-568) < 1;
let IS_IPAD = (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad);
let IS_IOS8 = (UIDevice.currentDevice().systemVersion.floatValue >= 8)
let APP_DEFAULT_FONT_FACE_NAME = "HelveticaNeue-Light";
let APP_DEFAULT_FONT_FACE_THIN_NAME = "HelveticaNeue-UltraLight";
let APP_VERSION_STRING = "1.2";
Run Code Online (Sandbox Code Playgroud)
对于IS_IPHONE5常量,我曾经fabs避免可能的浮点舍入误差.我不确定它们是否会成为一个问题,但最好是安全的......
这个IS_IOS7宏在Swift中没用,因为Swift 只支持iOS 7及更高版本(IS_IOS7总是YES在Swift程序中.)我添加了一个IS_IOS8常量而不是......
| 归档时间: |
|
| 查看次数: |
2162 次 |
| 最近记录: |