BBASafeMacro.h
3.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
//
// 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