一尘不染

如何在Swift中替换这些屏幕尺寸和设备类型宏?

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"

我开始玩Swift,发现这些东西不再起作用了。因此,现在我应该如何定义这些宏,并检测该设备属于哪个家族?

如果Swift没有宏,执行该操作的语法是什么?


阅读 239

收藏
2020-07-07

共1个答案

一尘不染

在这种情况下,定义这些常量的最简单方法似乎是使用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";

对于IS_IPHONE5常量,我曾经fabs避免可能的浮点舍入错误。我不确定它们是否会成为问题,但是最好还是要安全…

IS_IOS7宏在Swift中没有用,因为Swift 仅支持iOS7和更高版本(IS_IOS7始终YES在Swift程序中。)我IS_IOS8改为添加一个常量…

2020-07-07