对plist构建数据模型,完成封装实现数据分离

pList是我们常用的数据格式,首先来看我们的pList文件:是一个数组,里面存放字典,字典分为两项,name对应名字,icon对应图片名字,我们还有一组以此命名的图片。

对此,为了封装数据,我们建一个类,取名AppInfo.

AppInfo.h文件:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface AppInfo : NSObject

@property (nonatomic,copy) NSString *name;
@property (nonatomic,copy) NSString *icon;

@property (nonatomic,strong,readonly) UIImage *image;

/** 使用字典实例化 */
+ (instancetype)initWithDictionary:(NSDictionary *)dict;
/** 类方法快速实例化 */
+ (instancetype)appInfoWithDictionary:(NSDictionary *)dict;

+ (NSArray *)appList;

@end

AppInfo.m文件:

#import "AppInfo.h"

@implementation AppInfo
@synthesize image = _image;

- (UIImage *)image
{
    if(_image == nil ){
        _image = [UIImage imageNamed:self.icon];
    }
    return _image;
}

- (instancetype)initWithDictionary:(NSDictionary *)dict
{
    self = [super init];
    if (self) {
        //KVC
        [self setValuesForKeysWithDictionary:dict];

    }
    return self;
}

+ (instancetype)appInfoWithDictionary:(NSDictionary *)dict
{
    return [[self alloc]initWithDictionary:dict];
}

+(NSArray *)appList
{
    NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil]];

    NSMutableArray *arrayM = [NSMutableArray array];
    for (NSDictionary *dict in array) {
        AppInfo *appInfo = [AppInfo appInfoWithDictionary:dict];
        [arrayM addObject:appInfo];
    }

    return arrayM;
}

@end

这样,在需要取数据的时候,只需调用 :

NSArray *array = [AppInfo appList];

就能得到一个AppInfo数组,其中Image,name都已经封装到了AppInfo中,直接取值即可。

时间: 2024-08-05 13:31:05

对plist构建数据模型,完成封装实现数据分离的相关文章

用Vue构建一个github“可视化大数据平台”-GitDataV,设计开发分享

写在前面 GitDataV,是一个github“大数据可视化平台”,通过它你可以更直观的看到你在github里的一些数据,(之所以打双引号,是因为我觉得这个还没到大数据可视化的程度).其实我在 上篇文章 分享的时候已经提到了这个想法,通过github提供的接口,做一个自己的“大数据分析页面”,所以我就花了几天晚上的时间,把这想法从设计到开发构建出来了,那么下面我就我个人的账号测试看看效果如下gif图 如果您感兴趣可以点击这里访问简单的:GitDataV网站(目前打包后有些小bug,但不影响正常使

PHP封装xml数据通信接口

PHP 生成XML数据 1)组装字符串 :简单,容易理解,常用 2)使用系统类 如: DomDocument 下面详细说明 组装字符串 生成XML数据 xml数据需要1.头信息<?xml 2.根节点 3.数据 <?php class Response{ /** *按json方式输出通信数据 *@param integer $code 状态码 *@param string $message 提示信息 *@param array $data 数据 *return string 返回值为json *

struts封装客户端数据到Action

1.在Action中定义简单数据类型的属性 给Action定义简单类型的属性,封装客户端请求的数据 简单类型:String,基本类型和对应的引用类型 只要保证客户端请求的参数名称和Action的属性名称一样. 2.在Action中定义javabean对象封装客户端数据 2.1定义实体类 public class Users { private String uname; private String upwd; private Integer type; public String getUna

使用Map List 封装json数据

<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> import net.sf.json.JSONObject; public static

Android Binder进程间通信---注册Service组件---封装进程间通信数据

本文参考<Android系统源代码情景分析>,作者罗升阳 一.测试代码: -/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp ----IFregService.h ~/Android/external/binder/client ----FregClient.cpp Binder库(libbinder)代码: ~/Android/fra

构建基于LBS的大数据应用

移动互联网时代,"大数据"是关键词之一.作为推送技术服务行业的先行者,个推不断进行技术革新引领推送革命.通过挖掘用户使用场景,结合地理位置信息精确命中不同用户的各类需求.在服务大客户的过程中通过自身平台积累的海量数据发展了大数据.目前,3.0产品最重要的技术--电子围栏技术:电子围栏是精确捕捉用户场景,实时给用户推送有价值消息的手机推送解决方案.客户根据业务需求,在地图上设置电子围栏区域和目标用户属性,通过冷数据画像(结合大数据分析,筛选目标用户)以及热数据投放(当目标用户进入电子围栏

【web前端面试题整理07】我不理解表现与数据分离。。。(转)

拜师传说 今天老夫拜师了,老夫有幸认识一个JS高手,在此推荐其博客,悄悄告诉你,我拜他为师了,他承诺我只收我一个男弟子..... 师尊刚注册的账号,现在博客数量还不多,但是后面点会有干货哦,值得期待. http://www.cnblogs.com/aaronjs/ 前言 上周回到了成都,这周就准备找工作了,对成都的聚美优品其实比较有好感的,所以昨天就先去 面试了,感觉技术面试的还不错啦,结果最后HR说经理不在,让我等经理反馈. 我当时相信了,但是回来想想感觉可能失败了,但是我不知道哪里出了问题.

模版+数据分离渲染方式的设计与实现

一 背景 1 现状 模版存放于后端 php输出页面html结构进行页面渲染 ajax请求,需要重渲结构时,php输出html结构 builder制作静态页面结构 jser完成页面交互逻辑开发 2 不足 模版数据无法存储本地,导致每次打开页面请求数据量巨大 数据每次要从接入层web服务器读取,没有合理利用CDN加速静态模版内容 联调成本较大,不利于前端控制页面展示和交互开发 3 解决方案 后端直接输出json数据 试图把渲染页面的模版存放在前端 4 技术路线 5 理论意义 利用CDN保存html模

使用Javascript实现表现和数据分离

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="utf-8"> <title></title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="des