//FIXME:----------------- 系统对象
#define kApplication [UIApplication sharedApplication] //APP对象 (单例对象)
#define kWindow [UIApplication sharedApplication].keyWindow //主窗口 (keyWindow)
#define kAppDelegate (AppDelegate *)UIApplication.sharedApplication.delegate //APP对象 (单例对象)
#define kUserDefaults [NSUserDefaults standardUserDefaults] //NSUserDefaults实例化
#define kNotificationCenter [NSNotificationCenter defaultCenter] //通知中心 (单例对象)
#define KPostNotification(name,obj,info) [[NSNotificationCenter defaultCenter]postNotificationName:name object:obj userInfo:info]//发送通知
#define kAppVersion [[[NSBundle mainBundle] infoDictionary] valueForKey:@"CFBundleShortVersionString"]//APP版本号
#define kSystmVersion [[UIDevice currentDevice] systemVersion]//系统版本号
#define kDisplayName [[NSBundle mainBundle].infoDictionary objectForKey:@"CFBundleDisplayName"]
//FIXME:-----------------屏幕尺寸
#define SCREEN_BOUNDS [UIScreen mainScreen].bounds //获取屏幕尺寸
#define SCREEN_H SCREEN_BOUNDS.size.height//获取屏幕高度
#define SCREEN_W SCREEN_BOUNDS.size.width//获取屏幕宽度
//FIXME: -----------------机型判断
#define kScreenMaxLength (MAX(SCREEN_H, SCREEN_W))
#define kScreenMinLength (MIN(SCREEN_H, SCREEN_W))
#define kISiPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define kISiPhone5 (kISiPhone && kScreenMaxLength == 568.0)
#define kISiPhone6 (kISiPhone && kScreenMaxLength == 667.0)
#define kISiPhone6P (kISiPhone && kScreenMaxLength == 736.0)
#define kISiPhoneX (kISiPhone && kScreenMaxLength == 812.0)
#define kISiPhoneXr (kISiPhone && kScreenMaxLength == 896.0)
#define kISiPhoneXLater (kISiPhone && kScreenMaxLength > 812.0)
#define kISiPhone5Later ( kISiPhone && kScreenMaxLength > 568 ? YES : NO)
//FIXME:----------------- 屏幕适配计算
// 系统控件默认高度
#define isIPhoneX (([[UIApplication sharedApplication] statusBarFrame].size.height > 20)?1:0)
//#define isIPhoneX (([UIScreen mainScreen].bounds.size.height>=812)?1:0)
#define kStatusBarHeight ([[UIApplication sharedApplication] statusBarFrame].size.height)
#define kNavBarHeight (44.f)
#define kTabBarHeight (49.f)
#define kBottomSafeH (isIPhoneX?34:0)
#define kTopStatusAndNavBarHeight (kStatusBarHeight + kNavBarHeight)
#define kBottomHAndTabBarHeight (kTabBarHeight + kBottomSafeH)
#define NavNormalHight kTopStatusAndNavBarHeight
//FIXME: -----------------系统版本判断
#define isIOS7 (([UIDevice currentDevice].systemVersion.floatValue >= 7.0f && [UIDevice currentDevice].systemVersion.floatValue < 8.0) ? YES : NO)
#define isIOS7_Or_Later (([UIDevice currentDevice].systemVersion.floatValue >= 7.0f) ? YES : NO)
#define isIOS8 (([UIDevice currentDevice].systemVersion.floatValue >= 8.0f && [UIDevice currentDevice].systemVersion.floatValue < 9.0f) ? YES : NO)
#define isIOS8_Or_Later (([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) ? YES : NO)
#define isIOS9 (([UIDevice currentDevice].systemVersion.floatValue >= 9.0f && [UIDevice currentDevice].systemVersion.floatValue < 10.0f) ? YES : NO)
#define isIOS9_Or_Later (([UIDevice currentDevice].systemVersion.floatValue >= 9.0f) ? YES : NO)
#define isIOS10 (([UIDevice currentDevice].systemVersion.floatValue >= 10.0f && [UIDevice currentDevice].systemVersion.floatValue < 11.0f) ? YES : NO)
#define isIOS10_Or_Later (([UIDevice currentDevice].systemVersion.floatValue >= 10.0f) ? YES : NO)
#define isIOS11 (([UIDevice currentDevice].systemVersion.floatValue >= 11.0f && [UIDevice currentDevice].systemVersion.floatValue < 12.0f) ? YES : NO)
#define isIOS11_Or_Later (([UIDevice currentDevice].systemVersion.floatValue >= 11.0f) ? YES : NO)
#define IOS11 @available(iOS 11.0, *)
//FIXME: -----------------沙盒路径 (temp, Document,Cache, Library/Caches路径)
#define Path_Temp NSTemporaryDirectory()
#define Path_Document [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
#define Path_Cache [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]
#define Path_File ([[NSFileManager defaultManager] URLForDirectory:NSCachesDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil])
//FIXME: -----------------判空处理( 字符串,数组,字典,object)
#define kISNullString(str) ([str isKindOfClass:[NSNull class]] || str == nil || [str length] < 1 ? YES : NO )
#define kISNullArray(array) (array == nil || [array isKindOfClass:[NSNull class]] || array.count == 0 ||[array isEqual:[NSNull null]])
#define kISNullDict(dic) (dic == nil || [dic isKindOfClass:[NSNull class]] || dic.allKeys == 0 || [dic isEqual:[NSNull null]])
#define kISNullObject(_object) (_object == nil || [_object isKindOfClass:[NSNull class]] || ([_object respondsToSelector:@selector(length)] && [(NSData *)_object length] == 0) || ([_object respondsToSelector:@selector(count)] && [(NSArray *)_object count] == 0))
//FIXME:----------------- 获取时间 (当前的年,月,日,时,分,秒)
#define CurrentTime_Year [[NSCalendar currentCalendar] component:NSCalendarUnitYear fromDate:[NSDate date]]
#define CurrentTime_Month [[NSCalendar currentCalendar] component:NSCalendarUnitMonth fromDate:[NSDate date]]
#define CurrentTime_Day [[NSCalendar currentCalendar] component:NSCalendarUnitDay fromDate:[NSDate date]]
#define CurrentTime_Hour [[NSCalendar currentCalendar] component:NSCalendarUnitHour fromDate:[NSDate date]]
#define CurrentTime_Min [[NSCalendar currentCalendar] component:NSCalendarUnitMinute fromDate:[NSDate date]]
#define CurrentTime_Sec [[NSCalendar currentCalendar] component:NSCalendarUnitSecond fromDate:[NSDate date]]
// FIXME:----------------- 基于 iPhone6 width=375 计算数据
#define SJYNUM(num) ((num)*(SCREEN_W/375.0f))
//FIXME:-----------------字符串拼接
#define String_BuildFormat(format,...) [NSString stringWithFormat:format,##__VA_ARGS__]
#define NSStringFormat(format,...) [NSString stringWithFormat:format,##__VA_ARGS__]
#define Weak_Self __weak typeof(self) weakSelf = self
//FIXME:----------------- 图片名字
#define SJYCommonImage(imageName) [UIImage imageNamed:imageName]
#define SJYNotCommonImage(imageName) [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageName ofType:@"png"]]
//FIXME:----------------- 字体宏处理
#define FontSystem(fsize) [UIFont systemFontOfSize:fsize]
#define FontBold(size) [UIFont boldSystemFontOfSize:size]
#define FontEqualNum(sizeNum) [UIFont fontWithName:@"Helvetica Neue" size:sizeNum]//等宽数字
//#define Font_ListTitle [UIFont systemFontOfSize:SJYNUM(15)] //FontSystem(15)
//#define Font_ListSubtitle [UIFont systemFontOfSize:SJYNUM(14)] //FontSystem(14)
//#define Font_ListOtherTxt [UIFont systemFontOfSize:SJYNUM(13)] //FontSystem(13)
//#define Font_ListLeftCircle [UIFont systemFontOfSize:SJYNUM(12)]// FontSystem(12)
#define Font_ListTitle FontSystem(15)
#define Font_ListSubtitle FontSystem(14)
#define Font_ListOtherTxt FontSystem(13)
#define Font_ListLeftCircle FontSystem(12)
//FIXME:----------------- 提示框
#define SJYAlertShowVC(titleText,messageText,buttonName)\
UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:(titleText) message:(messageText) preferredStyle:UIAlertControllerStyleAlert];\
[alertVC addAction: [UIAlertAction actionWithTitle:(buttonName) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {\
}]];\
[kWindow.rootViewController presentViewController:alertVC animated:YES completion:nil];\
//[alertVC addAction: [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]];\
#ifdef DEBUG
#define NSLog(format , ...) NSLog((@"\n[***函数名:%s]\n" "[行号:%d]\n" format), __FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define NSLog(format, ...) nil
#endif