遍歷類成員

- (NSDictionary *)toDictionary
{
    NSMutableDictionary *dictionaryFormat = [NSMutableDictionary dictionary];
    
    //  取得當前類類型
    Class cls = [self class];
    
    unsigned int ivarsCnt = 0;
    // 獲取類成員變量列表,ivarsCnt爲類成員數量
    Ivar *ivars = class_copyIvarList(cls, &ivarsCnt);
    
    // 遍歷成員變量列表,其中每一個變量都是Ivar類型的結構體
    for (const Ivar *p = ivars; p < ivars + ivarsCnt; ++p)
    {
        Ivar const ivar = *p;
        
        // 獲取變量名
        NSString *key = [NSString stringWithUTF8String:ivar_getName(ivar)];
        // 若此變量未在類結構體中聲明而只聲明爲Property,則變量名加前綴 '_'下劃線
        // 好比 @property(retain) NSString *abc;則 key == _abc;
        
        // 獲取變量值
        id value = [self valueForKey:key];
        
        // 取得變量類型
        // 經過 type[0]能夠判斷其具體的內置類型
        const char *type = ivar_getTypeEncoding(ivar);
        
        if (value)
        {
            [dictionaryFormat setObject:value forKey:key];
        } 
    }
    return dictionaryFormat;
}
相關文章
相關標籤/搜索