iOS 將對象的屬性和屬性值拆分成key、value,通過字串key來擷取該屬性的值,iosvalue

來源:互聯網
上載者:User

iOS 將對象的屬性和屬性值拆分成key、value,通過字串key來擷取該屬性的值,iosvalue

  這篇部落格光看標題或許就會產生疑問,某個對象,只要它存在某個屬性,且值不是空的,不就能直接用點方法擷取嗎,為什麼要拆分成key和value多此一舉呢?下面,我用一個例子告訴大家,既然這方法是存在的,那就有它存在的價值。

      有一個對象,比如說是倉庫清單:model。蘋果:100斤,香蕉:50斤,梨子:80斤。。。。。。。。(共50種貨物)

      現在我要建立一個tableView表格,一個分區,50個儲存格,每個cell的內容是:貨物種類    存有多少

      cell肯定是根據IndexPatch.row來取值的,row對應的數組便是kindArr:["蘋果","香蕉","梨子",......](長度為50)

      在cell的代理函數中,我們不可能這麼寫:lable.text = model.kindArr[IndexPatch.row],絕對報錯,問題就來了,如何把字串轉化成對象的屬性呢?這個問題估計找很久都是竹籃打水。

      所以這裡換個思維,將對象的屬性和屬性值拆分成key、value,代碼如下(Swift):

func getValueByKey(key:String) ->String{        let hMirror = Mirror(reflecting: model)        for case let (label?, value) in hMirror.children{            if (label == key) {                return value as! String;            }        }        return "";    }

      如此,cell裡的代碼就是lable.text = getValueByKey(key:kindArr[IndexPatch.row])

      這邊順便複製過來一份OC的代碼:iOS 擷取對象的全部屬性、把model的所有屬性和對應的值轉化為字典(網址:http://blog.csdn.net/moxi_wang/article/details/50740708)

//擷取對象的所有屬性- (NSArray *)getAllProperties{    u_int count;    objc_property_t *properties  =class_copyPropertyList([self class], &count);    NSMutableArray *propertiesArray = [NSMutableArray arrayWithCapacity:count];    for (int i = 0; i<count; i++)    {        const char* propertyName =property_getName(properties[i]);        [propertiesArray addObject: [NSString stringWithUTF8String: propertyName]];    }    free(properties);    return propertiesArray;}//Model 到字典- (NSDictionary *)properties_aps{    NSMutableDictionary *props = [NSMutableDictionary dictionary];    unsigned int outCount, i;    objc_property_t *properties = class_copyPropertyList([self class], &outCount);    for (i = 0; i<outCount; i++)    {        objc_property_t property = properties[i];        const char* char_f =property_getName(property);        NSString *propertyName = [NSString stringWithUTF8String:char_f];        id propertyValue = [self valueForKey:(NSString *)propertyName];        if (propertyValue) [props setObject:propertyValue forKey:propertyName];    }    free(properties);    return props;}

 

 

 

      

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.