iOS: 小试KVC中的集合和集合操作_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > iOS: 小试KVC中的集合和集合操作

iOS: 小试KVC中的集合和集合操作

 2013/9/15 22:46:18  _Mgen  博客园  我要评论(0)
  • 摘要:当KVC从一个类型中搜索属性时,会先按照一定模式来直接获取属性。比如属性值是myProp,KVC会搜索myProp或isMyProp这样命名的属性(可参考KVC文档中的CommonlyUsedAccessorPatterns)。而当上述属性没有被找到后,KVC会继续搜索集合样式的执行方法(可参考KVC文档中的CollectionAccessorPatternsforTo-ManyProperties),官方文档中讲了许多执行方式,NSArray和NSSet
  • 标签:iOS 操作

当KVC从一个类型中搜索属性时,会先按照一定模式来直接获取属性。比如属性值是myProp,KVC会搜索myProp或isMyProp这样命名的属性(可参考KVC文档中的Commonly Used Accessor Patterns)。

而当上述属性没有被找到后,KVC会继续搜索集合样式的执行方法(可参考KVC文档中的Collection Accessor Patterns for To-Many Properties),官方文档中讲了许多执行方式,NSArray和NSSet(官方文档中的Indexed Accessor Pattern代表NSArray,Unordered Accessor Pattern代表NSSet),以及非Mutable和Mutable的方式。这里就拿就简单NSArray做示例。

 

定义一个类型MyData,拟定我们需要的属性叫mgen。则需要定义countOfMgen方法和objectInMgenAtIndex:index:方法。

如下代码:

#import "MyData.h"

 

@implementation MyData

 

//数组长度

- (NSUInteger)countOfMgen;

{

    return 4;

}

 

//数组成员

- (id)objectInMgenAtIndex:(NSUInteger)index;

{

    return [NSNumber numberWithUnsignedInt:index + 1];

}

 

@end

 

OK,接下来就可以使用了:

MyData *mydata = [[MyData alloc] init];

//通过KVC获取属性值

NSArray *arr = [mydata valueForKeyPath:@"mgen"];

 

NSLog(@"%@", [arr class]);

NSLog(@"%@", arr);

 

输出:

NSKeyValueArray

(

    1,

    2,

    3,

    4

)

成功通过KVC获取数组,要知道我们的类型MyData中是没有直接定义任何命名是mgen的属性。

同时注意KVC返回的数组类型是NSKeyValueArray,该类型继承自NSArray,通过改写部分NSArray类型的方法从而实现KVC中的特殊调用。

 

我们还可以继续使用这个数组做KVC的集合操作,比如获取这个数组的平均值,代码如下:

MyData *mydata = [[MyData alloc] init];

//KVC集合caozuofu.html" target="_blank">操作符

NSNumber *number = [mydata valueForKeyPath:@"mgen.@avg.self"];

NSLog(@"%@", number);

 

输出:

2.5

 

当然KVC还包含非常多的内容,官方文档永远是最好的书。

发表评论
用户名: 匿名