BBASafeMacro.h 3.37 KB
//
//  BBASafeMacro.h
//  BBAFoundation
//
//  Created by Zhu,Yusong on 2018/9/19.
//  Copyright © 2018年 Baidu. All rights reserved.
//
/*
 * 安全相关的宏定义,建议各个代码块使用
 * 详细介绍请看README-SafeAPI
 */

#import <Foundation/Foundation.h>

#ifndef BBASafeMacro_h
#define BBASafeMacro_h

// check对象的类
#define BBAIsKindOfClass(anObject, aClass) [anObject isKindOfClass:aClass]
#define BBAIsString(aString) [BBASafeMethod isString:aString]
#define BBAIsArray(anArray) [BBASafeMethod isArray:anArray]
#define BBAIsDictionary(aDictionary) [BBASafeMethod isDictionary:aDictionary]
#define BBAIsNumber(aNumber) [BBASafeMethod isNumber:aNumber]

// check字符串
#define CHECK_STRING_VALID(targetString) \
[BBASafeMethod checkValidString:targetString]
#define CHECK_STRING_INVALID(targetString) \
(!CHECK_STRING_VALID(targetString))
#define CHECK_STRING_ISEMPTY(targetString) \
(BBAIsString(targetString) && [(NSString *)targetString length] == 0)

// check数组
#define CHECK_ARRAY_VALID(targetArray) \
[BBASafeMethod checkValidArray:targetArray]
#define CHECK_ARRAY_INVALID(targetArray) \
(!CHECK_ARRAY_VALID(targetArray))

// check字典
#define CHECK_DICTIONARY_VALID(targetDictionary) \
[BBASafeMethod checkValidDictionary:targetDictionary]
#define CHECK_DICTIONARY_INVALID(targetDictionary) \
(!CHECK_DICTIONARY_VALID(targetDictionary))

// check数字
#define CHECK_NUMBER_ISZERO(targetNumber) \
(BBAIsNumber(targetNumber) && [@0 isEqualToNumber:(NSNumber *)targetNumber])
#define CHECK_NUMBER_ISNONZERO(targetNumber) \
[BBASafeMethod checkNonzeroNumber:targetNumber]

// check Data
#define CHECK_DATA_VALID(targetData) \
[BBASafeMethod checkValidData:targetData]

// check URL
#define CHECK_URL_VALID(targetURL) \
[BBASafeMethod checkValidURL:targetURL]

// check Range
#define CHECK_RANGE_VALID(targetRange) \
[BBASafeMethod checkValidRange:targetRange]

// check 字典的 Key 值 (是否遵循 NSCopying 协议)
#define CHECK_KEY_VALID(targetKey) \
[targetKey conformsToProtocol:@protocol(NSCopying)]

// 浮点类型判零
#define IS_EQUALS_FLOAT_ZERO(val) \
((val) > -0.000001f && (val) < 0.000001f)

//  只作为sdk的兼容,请勿调用
//#define BBAIsNonEmptyString(targetString) CHECK_STRING_VALID(targetString)

//  只作为sdk的兼容,请勿调用
#define INIT_STRING_WITH_STRING(resultString,originString)           \
do{                                                                  \
resultString = [BBASafeMethod initStringWithString:originString];    \
}while(0)

//  只作为sdk的兼容,请勿调用
#define INIT_DATA_WITH_DATA(resultData,originData)                   \
do{                                                                  \
resultData = [BBASafeMethod initDataWithData:originData];            \
}while(0)
#endif

/// 11.3需求: 通过方法来替换宏,减小包体积

@interface BBASafeMethod : NSObject

+ (BOOL)isString:(id)target;

+ (BOOL)isArray:(id)target;

+ (BOOL)isDictionary:(id)target;

+ (BOOL)isNumber:(id)target;

+ (BOOL)checkValidString:(NSString *)string;

+ (BOOL)checkValidArray:(NSArray *)array;

+ (BOOL)checkValidDictionary:(NSDictionary *)dictionary;

+ (BOOL)checkNonzeroNumber:(NSNumber *)number;

+ (BOOL)checkValidData:(NSData *)data;

+ (BOOL)checkValidURL:(NSURL *)url;

+ (BOOL)checkValidRange:(NSRange)range;

+ (NSString *)initStringWithString:(NSString *)string;

+ (NSData *)initDataWithData:(NSData *)data;

@end