iOS 用KVC设置结构体
objc(iOS,macOS) 用KVC设置结构体
我花了一些时间完成了这个扩展KeyPathExtension,并且加入了更多的功能。把谓词功能也和KVC结合在一起了,私以为这样的结合并没有额外的学习成本和更多代码开销,反而让代码更加简洁,希望大家能够给个赞吧。
实现结构体路径的扩展思路:
在Fundation中KVC提供的键值路径只能访问对象,不能访问结构体。其实可以更面向对象。
执行下面的语句将会报错:
[self setValue:@() 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];
} ,
... ...
}
iOS 用KVC设置结构体的更多相关文章
- go语言通过反射获取和设置结构体字段值的方法
本文实例讲述了go语言通过反射获取和设置结构体字段值的方法.分享给大家供大家参考.具体实现方法如下: type MyStruct struct { N int } n := MyStruct{ 1 } ...
- iOS - 常用的CG结构体
CGPoint.CGSize.CGRect.CGRectEdge实际上都是结构体 一,几个常用的结构体 CGPoint 定义一个点,设置x坐标和y坐标 struct CGPoint { CGFlo ...
- iOS学习06C语言结构体
1.结构体的概述 在C语言中,结构体(struct)指的是一种数据结构,是C语言中构造类型的其中之一. 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名.年龄.身高 ...
- iOS开发——C篇&结构体与枚举
一:结构体与枚举的介绍: 结构体与枚举:是一种存储复杂的数据结构体:是用户自定义的一种类型,不同类型的集合,而数组是相同类型变量的集合. 二:结构体的创建 struct user { char ...
- iOS安全攻防之结构体保护使用
Objective-C 代码很容易被 hook,因此需要对一些重要的业务逻辑进行保护,可以改用结构体的形式,把函数名隐藏在结构体里,以函数指针成员的形式存储.这样编译后只留了下地址,去掉了名字和参数表 ...
- linux 端口设置结构体 struc
目录(?)[-] 一 输入模式 三输出模式 四控制模式 六特殊的控制字符 字符 TIME和MIN值 通过shell访问终端模式 终端速度 其他函数 使用termios结构的密码程序 termi ...
- iOS Foundation框架简介 -1.常用结构体的用法和输出
1.安装Xcode工具后会自带开发中常用的框架,存放的地址路径是: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.plat ...
- iOS Foundation框架 -1.常用结构体的用法和输出
1.安装Xcode工具后会自带开发中常用的框架,存放的地址路径是: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.plat ...
- 结构体成员管理AVClass AVOption之2AVOption,设置选项值
AVOption用于在FFmpeg中描述结构体中的成员变量.一个AVOption可以包含名称,简短的帮助信息,取值等. 上篇文章中概括了AVClass,AVOption和目标结构体之间的关系.以AVF ...
随机推荐
- Git Client 管理:项目文件的获取和提交(实用篇)
Git 服务器 可搭在云端如:coding.net.GitHub.TFS等,只要可以使用Git就可以. 示例: Git Client 安装相关程序,顺序如下: 1.安装Git-2.14.2.3-64- ...
- C语言图形编程
四.图形和图像函数(一) 像素函数 56. putpiel() 画像素点函数 57. getpixel()返回像素色函数(二) 直线和线型函数 58. line() 画线函数 ...
- C++ 随机数字以及随机数字加字母生成
#include <time.h>#include <sys/timeb.h>void MainWindow::slot_clicked(){ QString strRand; ...
- Spring手册
一.Spring 简介 二.结构体系 三.七大主要模块 四.Spring Maven依赖 五 .Sprinf framework 一.Spring 简介 spring是一个开源的轻量级的应用开发框架, ...
- docker如何创建支持SSH服务的镜像
一般情况下,Linux系统管理员通过SSH服务来管理操作系统,但Docker的很多镜像是不带SSH服务的,那么我们怎样才能管理操作系统呢?在第一部分中我们介绍了一些进入容器的办法,比如用attach. ...
- 微信网页IOS上传图片旋转解决方案
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 理解和配置Out of memory: Kill process
转自:爱开源 理解 OOM killer 最近有位 VPS 客户抱怨 MySQL 无缘无故挂掉,还有位客户抱怨 VPS 经常死机,登陆到终端看了一下,都是常见的 Out of memory 问题.这通 ...
- Python静态方法实现单实例模式
单实例模式 当程序中需要同一个实例就可以解决问题的场景,可以使用单实例模式
- ZT 80-90年代港台300部电视剧 你看过多少?
80-90年代港台300部电视剧 你看过多少? [复制链接] 噗噗 738主题 18精华 万家金领 发消息 发表于 2010-4-27 09:01:02 |显示全部楼层 1.(珍珠传奇) ...
- 我在德国做SAP CRM One Order redesign工作的心得
时间过得很快,今天是我到德国工作的第四周,刚好一个月.Prototype的框架已经搭起来了,现在Order能够在新的框架下正常读写,能跑一些简单的scenario,这些scenario对于end us ...