equalTo(...)不能傳數(shù)值參數(shù),因?yàn)閰?shù)是 id 類型的。mas_equalTo(...) 可以傳數(shù)值參數(shù),因?yàn)閙as_equalTo(...) 宏定義替換為一個(gè)equalTo(...)裝箱操作。如下:
#define mas_equalTo(...)? ? ? ? ? ? ? ? equalTo(MASBoxValue((__VA_ARGS__)))
其中MASBoxValue((__VA_ARGS__))定義如下:
#define MASBoxValue(value) _MASBoxValue(@encode(__typeof__((value))), (value))
staticinlineid_MASBoxValue(constchar*type, ...) {
? ? va_list v;
? ? va_start(v, type);
? ? idobj =nil;
? ? if(strcmp(type,@encode(id)) ==0) {
? ? ? ? idactual =va_arg(v,id);
? ? ? ? obj = actual;
? ? }elseif(strcmp(type,@encode(CGPoint)) ==0) {
? ? ? ? CGPointactual = (CGPoint)va_arg(v,CGPoint);
? ? ? ? obj = [NSValuevalue:&actualwithObjCType:type];
? ? }elseif(strcmp(type,@encode(CGSize)) ==0) {
? ? ? ? CGSizeactual = (CGSize)va_arg(v,CGSize);
? ? ? ? obj = [NSValuevalue:&actualwithObjCType:type];
? ? }elseif(strcmp(type,@encode(MASEdgeInsets)) ==0) {
? ? ? ? MASEdgeInsets actual = (MASEdgeInsets)va_arg(v, MASEdgeInsets);
? ? ? ? obj = [NSValuevalue:&actualwithObjCType:type];
? ? }elseif(strcmp(type,@encode(double)) ==0) {
? ? ? ? doubleactual = (double)va_arg(v,double);
? ? ? ? obj = [NSNumbernumberWithDouble:actual];
? ? }elseif(strcmp(type,@encode(float)) ==0) {
? ? ? ? floatactual = (float)va_arg(v,double);
? ? ? ? obj = [NSNumbernumberWithFloat:actual];
? ? }elseif(strcmp(type,@encode(int)) ==0) {
? ? ? ? intactual = (int)va_arg(v,int);
? ? ? ? obj = [NSNumbernumberWithInt:actual];
? ? }elseif(strcmp(type,@encode(long)) ==0) {
? ? ? ? longactual = (long)va_arg(v,long);
? ? ? ? obj = [NSNumbernumberWithLong:actual];
? ? }elseif(strcmp(type,@encode(longlong)) ==0) {
? ? ? ? longlongactual = (longlong)va_arg(v,longlong);
? ? ? ? obj = [NSNumbernumberWithLongLong:actual];
? ? }elseif(strcmp(type,@encode(short)) ==0) {
? ? ? ? shortactual = (short)va_arg(v,int);
? ? ? ? obj = [NSNumbernumberWithShort:actual];
? ? }elseif(strcmp(type,@encode(char)) ==0) {
? ? ? ? charactual = (char)va_arg(v,int);
? ? ? ? obj = [NSNumbernumberWithChar:actual];
? ? }elseif(strcmp(type,@encode(bool)) ==0) {
? ? ? ? boolactual = (bool)va_arg(v,int);
? ? ? ? obj = [NSNumbernumberWithBool:actual];
? ? }elseif(strcmp(type,@encode(unsignedchar)) ==0) {
? ? ? ? unsigned char actual = (unsigned char)va_arg(v, unsigned int);
? ? ? ? obj = [NSNumbernumberWithUnsignedChar:actual];
? ? }elseif(strcmp(type,@encode(unsignedint)) ==0) {
? ? ? ? unsigned int actual = (unsigned int)va_arg(v, unsigned int);
? ? ? ? obj = [NSNumbernumberWithUnsignedInt:actual];
? ? }elseif(strcmp(type,@encode(unsignedlong)) ==0) {
? ? ? ? unsigned long actual = (unsigned long)va_arg(v, unsigned long);
? ? ? ? obj = [NSNumbernumberWithUnsignedLong:actual];
? ? }else if (strcmp(type, @encode(unsigned long long)) == 0) {
? ? ? ? unsigned long long actual = (unsigned long long)va_arg(v, unsigned long long);
? ? ? ? obj = [NSNumber numberWithUnsignedLongLong:actual];
? ? }elseif(strcmp(type,@encode(unsignedshort)) ==0) {
? ? ? ? unsigned short actual = (unsigned short)va_arg(v, unsigned int);
? ? ? ? obj = [NSNumbernumberWithUnsignedShort:actual];
? ? }
? ? va_end(v);
? ? returnobj;
}