swift. 扩展类添加属性_Swift iOS-如何动态地向现有类添加属性然后访问它们
I need to dynamically add properties to an existing class then access them. I found this answer using objc_setAssociatedObject but there’s no context on how to use it. How can I achieve this?
let dict = ["orderId":"abc", "postId+0":"zero", "postId+1":"one", "postId+2":"two"] // postIds can go on
let order = Order(dict: dict)
let dynamicProperties = order.accessDynamicProperties()
print(dynamicProperties)
Class:
class Order {
var orderId: String?
// I have a main initilizer that I use for something else that's why I'm using a convenience init
convenience init(dict: [String: Any]) {
self.init()
orderId = dict["orderId"] as? String
dynamicallyCreateProperties(dict: dict)
}
func dynamicallyCreateProperties(dict: [String: Any]) {
for (key, value) in dict {
if key.contains("+") {
// dynamically add property and value to class
}
}
}
// returns something???
func accessDynamicProperties() -> ??? {
}
}
解决方案
Using the suggestion from @DonMag in the comments he gave me a great alternative. He suggested I create a dictionary as a property on the class then add the key,value pairs to it.
class Order {
var orderId: String?
var dynamicDict = [String: Any]()
convenience init(dict: [String: Any]) {
self.init()
orderId = dict["orderId"] as? String
createDynamicKeyValues(dict: dict)
}
func createDynamicKeyValues(dict: [String: Any]) {
for (key, value) in dict {
if key.contains("+") {
dynamicDict.updateValue(value, forKey: key)
}
}
}
}
To use it:
let dict = ["orderId":"abc", "postId+0":"zero", "postId+1":"one", "postId+2":"two"] // postIds can go on
let order = Order(dict: dict)
for (key, value) in order.dynamicDict {
print(key)
print(value)
}
swift. 扩展类添加属性_Swift iOS-如何动态地向现有类添加属性然后访问它们相关推荐
- cmake中添加引用动态链接_CMake 添加头文件目录,链接动态、静态库(添加子文件夹)...
CMake支持大写.小写.混合大小写的命令. 当编译一个需要第三方库的项目时,需要知道: 去哪找头文件(.h),-I(GCC) INCLUDE_DIRECTORIES() 去哪找库文件(.so/.dl ...
- CMake 添加头文件目录,链接动态、静态库(添加子文件夹)
CMake支持大写.小写.混合大小写的命令. 当编译一个需要第三方库的项目时,需要知道: 去哪找头文件(.h),-I(GCC) INCLUDE_DIRECTORIES() 去哪找库文件(.so/.dl ...
- 使用POI在Excel中动态生成图表工具类(支持柱状、组合、环状图、折线图、等常用图)
使用POI在Excel中动态生成图表工具类 使用POI在Excel中动态生成图表工具类 由于公司是一个生成报表的机构,之前一直使用pageOffice,但是公司领导就是不买,你说公司那样有钱磨磨唧唧干 ...
- swift. 扩展类添加属性_swift中的声明关键字详解
原起 学习swift,swift中的关键字当然要了解清楚了,最近在网上看到了关于声明关键字的文章,整理记录一下. 关键字是类似于标识符的保留字符序列,除非用重音符号(`)将其括起来,否则不能用作标识符 ...
- swift. 扩展类添加属性_Swift快速为类扩展属性
在程序编写过程中,我们常常需要为已有的类扩展新的属性.通常我们的解决办法是先声明一个Key,然后使用objc_getAssociatedObject 和 objc_setAssociatedObjec ...
- swift扩展_Swift扩展
swift扩展 Continuing with our series of Swift tutorials, we'll be discussing and playing around with S ...
- Swift 扩展存储属性
Swift扩展存储属性 Swift默认只能扩展计算属性无法扩展存储属性,如果想扩展存储属性就需要使用runtime. 使用runtime的两个核心方法(关联对象) /// 设置值 /// - 参数1: ...
- python类的成员函数_Python实现动态添加类的属性或成员函数的解决方法
某些时候我们需要让类动态的添加属性或方法,比如我们在做插件时就可以采用这种方法.用一个配置文件指定需要加载的模块,可以根据业务扩展任意加入需要的模块. 本文就此简述了Python实现动态添加类的属性或 ...
- swift 组件化_打造完备的iOS组件化方案:如何面向接口进行模块解耦?
作者 | 黑超熊猫zuik,一个修行中的 iOS 开发,喜欢搞点别人没搞过的东西,钻研过逆向工程.VIPER 架构和组件化. 关于组件化的探讨已经有不少了,在之前的文章 iOS VIPER架构实践(三 ...
最新文章
- vs2015 ctrl 单击 转到定义
- dir结构体 linux_Linux下DIR,dirent,stat等结构体详解
- OpenInfra Days China 2020 官网正式上线,含免费注册通道!
- Mac查看占用端口进程
- 一个对象对应多个对象如何在一个界面里实现新增_谈MDM主数据管理系统设计和实现关键点...
- 数字信号处理实验集合
- python爬取公众号历史文章_微信公众号爬虫--历史文章
- 深棕颜色html的色号,棕色rgb颜色值 有谁知道咖啡色的RGB值?
- 1041: 数列求和2 C语言
- 微信小程序中使用地图
- MATLAB-数字图像处理 量化
- 《精益创业》- 天下大事必作于细,天下难事必作于易
- python做一个登录注册界面_Python 实现简单的登录注册界面
- html5 workers,HTML5 Web Workers
- Python零基础之自动登录12306
- 分布式文件系统HDFS实践及原理详解part3
- 小米AI魔法分身解密(二)
- HTML的简介、文档结构及基本标记
- android与H5交互调用js方法无效问题
- sfc 修复 xp rpc服务器,指定的错误代码是?0x000006ba?[RPC?服务器不可用。]
热门文章
- Linux命令:ps,netstat,top
- 使用go build 进行条件编译
- Linux rpm 命令参数使用详解[介绍和应用]
- k3s安装和卸载:轻量级K8S
- Java API访问HDFS集群(HA)
- Apollo读取某个集群的配置
- Scala代码案例:求ax2+bx+c=0方程的根
- Java客户端操作zookeeper:获取/节点的子节点代码示例
- @ConditionalOnClass注解的作用
- 创建容器时[Warning] IPv4 forwarding is disabled. Networking will not work.