masonry 代碼中的裝箱操作

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;

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容