回到Objective-C,我在constants.h文件中定义了以下宏:
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"
我开始玩Swift,发现这些东西不再起作用了。因此,现在我应该如何定义这些宏,并检测该设备属于哪个家族?
如果Swift没有宏,执行该操作的语法是什么?
在这种情况下,定义这些常量的最简单方法似乎是使用let关键字。宏在Swift中不可用,因此在这种情况下,您必须使用常量(在这种情况下,就性能而言,它可能会更好):
let
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";
对于IS_IPHONE5常量,我曾经fabs避免可能的浮点舍入错误。我不确定它们是否会成为问题,但是最好还是要安全…
IS_IPHONE5
fabs
该IS_IOS7宏在Swift中没有用,因为Swift 仅支持iOS7和更高版本(IS_IOS7始终YES在Swift程序中。)我IS_IOS8改为添加一个常量…
IS_IOS7
YES
IS_IOS8