经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » iOS » 查看文章
iOS 用KVC设置结构体
来源:cnblogs  作者:米太白  时间:2018/11/20 23:06:56  对本文有异议

iOS 用KVC设置结构体

  在Fundation中KVC提供的键值路径只能访问对象,不能访问结构体。这很不面向对象。

  执行下面的语句将会报错:

  1. [self setValue:@(100) forKeyPath:@"view.frame.width.x"];

    // reason: '[<NSConcreteValue 0x600003466740> valueForUndefinedKey:]: this class is not key value coding-compliant for the key width.'

  实现这个功能是很简单的:首先NSValue的结构体信息,然后拿到关于这个结构体如何取值和赋值的信息。有了这两条信息就可以了。

  最方便的数据结构就是字典,Key是objcType,value用block,里面放置如何操作传入的结构体内容。综合来看这样基本上也没什么很大的开销。

  1. @{
  2. @"size" : ^(NSValue* value){
  3. return [NSValue valueWithCGSize:[value CGRectValue].size];
  4. } ,
  5. ... ...
  6. }
  1. @{
  2. @"size" : ^(NSValue* value , id newValue){
  3. CGRect rect = [value CGRectValue];
  4. rect.size = [newValue CGSizeValue];
  5. return [NSValue valueWithCGRect:rect];
  6. } ,
  7. ... ...
  8. }

  我花了一些时间完成了这个扩展AkvcExtension,并且加入了更多的功能。把谓词功能也和KVC结合在一起了,私以为这样的结合并没有额外的学习成本和更多代码开销,反而让代码更加简洁,希望大家能够给个赞吧。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号