setValuesForKeysWithDictionary:的用途

setValuesForKeysWithDictionary :今天发现这个高大上的功能,让我心奋不已,以后妈妈再也不用担心模型属性多了,再也不用担心将字典中的值赋值到模型中的麻烦操作了。

模型的.h文件

#import <Foundation/Foundation.h>

@interface appModel : NSObject
@property(nonatomic,copy)NSString * name;
@property(nonatomic,copy)NSString * icon;
-  (instancetype)initWithApp:(NSDictionary *)dict;
+ (instancetype)appWithDict:(NSDictionary *)dict;
@end

模型的.m文件

@implementation appModel
- (instancetype)initWithApp:(NSDictionary *)dict
{
    //构造方法中必须有self = [super init]的判断
    if (self =[super init]) {
        //将字典中的数据取出,赋值给模型
        self.name = dict[@"name"];
        self.icon = dict[@"icon"];
    }

    return  self;
}
/**
 *  也可以通过类方法进行取值
 *
 *  @param dict <#dict description#>
 *
 *  @return <#return value description#>
 */
+ (instancetype)appWithDict:(NSDictionary *)dict
{
    return  [[appModel alloc] initWithApp:dict];
}
@end

看到我们在构造方法中做的事情了吧,目前只有两个属性需要赋值,试想如果我们需要给一千个属性进行赋值,那么我们的工作是多么枯燥无味,而且为了一个这么没有技术含量的事情话费这么多的时间是没有必要的。所以xcode提供了setValuesForKeysWithDictionary:这方法进行赋值,直接减少了我们的工作量。代码如下:

@implementation herosModel
/**
 *  类方法
 *  辅助功能 同构造方法功能一致
 */
+(instancetype)herosModelWithDict:(NSDictionary*) dict
{
    return  [[herosModel alloc]initWithDict:dict];
}
/**
 *  构造方法
 */
-(instancetype)initWithDict:(NSDictionary*)dict
{
    //需要先判断一下父类方法
    if (self=[super init]) {
        //通过映射的方法,将字典中的每一个元素根heros中的属性进行逐个映射;
        [self setValuesForKeysWithDictionary:dict];
    }
    return  self;
}
@end

setValuesForKeysWithDictionary: ,非常好用,不需要你来一一的给对象赋值而直接从字典初始化即可,但用的不好会经常崩溃!这个希望大家在使用过程中多注意。

时间: 2024-10-22 12:27:28

setValuesForKeysWithDictionary:的用途的相关文章

JQuery的用途和功能

jQuery库为Web脚本编程提供了通用的抽象层,使得它几乎适用于任何编程的情形.由天它容易扩展而且不断有新插件面世增强它的功能,所以这里无法涵盖它所有可能的用途和功能.抛开这些就其核心特性而言,jQuery能够满足下列需求:    一.取得页面中的元素. 如果不使用JavaScript库,遍历DOM树,以及查找HTML文档结构中某个特殊的部分,必需编写很多代码.jQuery为准确获取需要操纵的文档元素,提供了可靠而富有效率的选择符机制.    二.修改页面的外观. CSS虽然为呈现方式提供了一

解读Mirantis Fuel部署OpenStack各个网络的用途和分析

首先得说一声不好意思,之前的环境破坏了,一直没有机器进行测试,所以之前的文章到第三篇就结束了一直没找到时间和环境继续测试,这里就简单说说Fuel的网络. 部署OpenStack最复杂的应该算是网络部分了,Fuel简化部署OpenStack的同时网络类型对于新手来说也是费解,接下来我简单说一下我的理解. 下图是我们使用Fuel部署的时候遇到的几个网络类型,此时使用neutron vlan模式部署. 我们总结下,大致是五个网络: 1.PXE(部署网络):这是部署网络,也就是在节点开机的时候设置的网络

ISIS的OL过载机制新用途

1.OL过载机制的特性 在同一个区域中,所有ISIS路由器的LS数据库要求要完全一致,只有这样才能实现,各个路由器上计算出来的这颗最短路径树完全一样(只是各个路由器节点处于树中的位置不同而已). 如果区域中某台路由器用于储存LS数据库的内存被消耗殆尽,那么就意味着该ISIS路由器将无法攒齐本区域内所有的LSP.那么在进行SPF计算的时候必然会出现问题.当出现这种情况的时候,其他ISIS路由器在计算最短路径树时,应该将这台路由器视为最短路径树中的某个"叶节点"路由器,而不应该将其视为某个

C++的 RTTI 观念和用途(非常详细)

自从1993年Bjarne Stroustrup [注1 ]提出有关C++ 的RTTI功能之建议﹐以及C++的异常处理(exception handling)需要RTTI:最近新推出的C++ 或多或少已提供RTTI. 然而,若不小心使用RTTI,可能会导致软件弹性的降低.本文将介绍RTTI的观念和近况﹐并说明如何善用它. 什么是RTTI﹖      在C++ 环境中﹐头文件(header file) 含有类之定义(class definition)亦即包含有关类的结构资料(representat

content属性的4种用途

content属性浏览器支持情况,兼容到IE8浏览器,IE7及以下不支持 用途一.配合:before及:after伪元素插入文本 <div>     <p>伪元素</p> </div> p:before{     content:'CSS3';     color:#4bb;     font-weight:bold;     margin-right:20px;     background:#f0f0f0;     /*如果要设置宽高的话,就必须变成块级

Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究

随笔- 40  文章- 0  评论- 1 Java的初始化块.静态初始化块.构造函数的执行顺序及用途探究 Java与C++有一个不同之处在于,Java不但有构造函数,还有一个”初始化块“(Initialization Block)的概念.下面探究一下它的执行顺序与可能的用途. 执行顺序 首先定义A, B, C三个类用作测试,其中B继承了A,C又继承了B,并分别给它们加上静态初始化块.非静态初始化块和构造函数,里面都是一句简单的输出. 主类Main里面也如法炮制. 1 class A { 2 st

iOS 生命周期 -init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear 区别和用途

iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 init-初始化程序 viewDidLoad-加载视图 viewWillAppear-UIViewController对象的视图即将加入窗口时调用: viewDidApper-UIViewController对象的视图已经加入到窗口时调用: viewWillDisappear-UIViewCont

全面理解Javascript闭包和闭包的几种写法及用途

一.什么是闭包和闭包的几种写法和用法                                                       1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. 作为一个函数变量的一个引用,当函数返回时,其处于激活状态. 2. 一个闭包就是当一个函数返回时,一个没有释放资源的栈区. 简单的说,Javascript允许使用内部函数---即函数定义和函数表

setValuesForKeysWithDictionary:方法的改进

setValuesForKeysWithDictionary是KVC体系中的一个方法.赋值过程中也许会有镶嵌的字典为自定义变量赋值,比如Person类里镶嵌了一个Car类,这时候用setValuesForKeysWithDictionary就会让car指针指向一个字典,setValuesForKeysWithDictionary使用如下 楼主改进了这个办法,使得镶嵌类型也可以正确赋值 使用效果 下面附上源码 点我有源码^_^ 注意:1.用字典赋值的类属性需要int NSUInterget等基本变