JSONModel源碼閱讀筆記

來源:互聯網
上載者:User

JSONModel是一個解析伺服器返回的Json資料的庫。

通常伺服器傳回的json資料要通過寫一個資料轉換模組將NSDictionary轉換為Model,將NSString資料轉換為Model中property的資料類型。

這樣伺服器如果要做修改,可能需要改兩三個檔案。

JSONModel的出現就是為了將這種解析工作在設計層面完成。

使用方法:參考串連

對其源碼的核心部分JSONModel.m做了源碼閱讀,筆記如下:


函數中完成所有解析工作:如果有任何失誤或者錯誤直接返回nil。

-()initWithDictionary:(NSDictionary*)dict error:(NSError**     (! (err) *err =     (![dict isKindOfClass:[NSDictionary  (err) *err =    self = (!         (err) *err =    NSArray* incomingKeysArray =* requiredProperties =* incomingKeys =    JSONKeyMapper* keyMapper =            NSMutableSet* transformedIncomingKeys =* transformedName =         (NSString* requiredPropertyName             transformedName =                    incomingKeys =     (!        JMLog( (err) *err =    incomingKeys==     (JSONModelClassProperty* property         NSString* jsonKeyPath = (keyMapper) jsonKeyPath =         jsonValue =         (jsonValue==nil && property.isOptional==                    Class jsonValueClass = [jsonValue = (Class allowedType = (isValueOfAllowedType==            JMLog( (err) *err =                     (property.type == nil && property.structName==                                         ([[property.type ] isSubclassOfClass:[JSONModel                 NSError* initError = value = [[property.type alloc] initWithDictionary: jsonValue error:& (! (initError && err) *err =                                                    jsonValue = (! (err) *err =                 (property.isStandardJSONType &&                    =                                    (![jsonValue isKindOfClass:property.type] && !||                                        Class sourceClass = [JSONValueTransformer classByResolvingClusterClasses:[jsonValue                     NSString* selectorName = [NSString stringWithFormat:? property.structName : property.type),                                               sourceClass];                     SEL selector =                     clang diagnostic push clang diagnostic ignored "-Warc-performSelector-leaks"                                                jsonValue = clang diagnostic pop                         [NSException exceptionWithName:, property.type, [self     NSError* validationError == [self validate:& (doesModelDataValidate == (err) *err =    








   

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.