zoukankan      html  css  js  c++  java
  • keypath扩展/iOS 用KVC设置结构体

    objc(iOS,macOS) 用KVC设置结构体

     

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

     

      实现结构体路径的扩展思路:

    在Fundation中KVC提供的键值路径只能访问对象,不能访问结构体。其实可以更面向对象。

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

    [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,里面放置如何操作传入的结构体内容。综合来看这样基本上也没什么很大的开销。

    @{
        @"size"   :   ^(NSValue* value){
        
            return [NSValue valueWithCGSize:[value CGRectValue].size];
        } ,
        ... ...
    }
    @{
        @"size"   :   ^(NSValue* value , id newValue){
    
            CGRect rect = [value CGRectValue];
            rect.size = [newValue CGSizeValue];
            return [NSValue valueWithCGRect:rect];
        } ,
        ... ...
    }

      

  • 相关阅读:
    event loop笔记
    webpack不同devtools打包对比
    windows 7系统搭建本地SVN服务器的过程
    Eclipse安装SVN插件
    总结eclipse中安装maven插件
    myeclipse building workspace如何禁止及提高myeclipse速度
    基于SAML的单点登录介绍
    使用 CAS 在 Tomcat 中实现单点登录
    SSO之CAS备忘
    Maven环境变量配置
  • 原文地址:https://www.cnblogs.com/xiaobajiu/p/9990582.html
Copyright © 2011-2022 走看看