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-如何动态地向现有类添加属性然后访问它们相关推荐

  1. cmake中添加引用动态链接_CMake 添加头文件目录,链接动态、静态库(添加子文件夹)...

    CMake支持大写.小写.混合大小写的命令. 当编译一个需要第三方库的项目时,需要知道: 去哪找头文件(.h),-I(GCC) INCLUDE_DIRECTORIES() 去哪找库文件(.so/.dl ...

  2. CMake 添加头文件目录,链接动态、静态库(添加子文件夹)

    CMake支持大写.小写.混合大小写的命令. 当编译一个需要第三方库的项目时,需要知道: 去哪找头文件(.h),-I(GCC) INCLUDE_DIRECTORIES() 去哪找库文件(.so/.dl ...

  3. 使用POI在Excel中动态生成图表工具类(支持柱状、组合、环状图、折线图、等常用图)

    使用POI在Excel中动态生成图表工具类 使用POI在Excel中动态生成图表工具类 由于公司是一个生成报表的机构,之前一直使用pageOffice,但是公司领导就是不买,你说公司那样有钱磨磨唧唧干 ...

  4. swift. 扩展类添加属性_swift中的声明关键字详解

    原起 学习swift,swift中的关键字当然要了解清楚了,最近在网上看到了关于声明关键字的文章,整理记录一下. 关键字是类似于标识符的保留字符序列,除非用重音符号(`)将其括起来,否则不能用作标识符 ...

  5. swift. 扩展类添加属性_Swift快速为类扩展属性

    在程序编写过程中,我们常常需要为已有的类扩展新的属性.通常我们的解决办法是先声明一个Key,然后使用objc_getAssociatedObject 和 objc_setAssociatedObjec ...

  6. swift扩展_Swift扩展

    swift扩展 Continuing with our series of Swift tutorials, we'll be discussing and playing around with S ...

  7. Swift 扩展存储属性

    Swift扩展存储属性 Swift默认只能扩展计算属性无法扩展存储属性,如果想扩展存储属性就需要使用runtime. 使用runtime的两个核心方法(关联对象) /// 设置值 /// - 参数1: ...

  8. python类的成员函数_Python实现动态添加类的属性或成员函数的解决方法

    某些时候我们需要让类动态的添加属性或方法,比如我们在做插件时就可以采用这种方法.用一个配置文件指定需要加载的模块,可以根据业务扩展任意加入需要的模块. 本文就此简述了Python实现动态添加类的属性或 ...

  9. swift 组件化_打造完备的iOS组件化方案:如何面向接口进行模块解耦?

    作者 | 黑超熊猫zuik,一个修行中的 iOS 开发,喜欢搞点别人没搞过的东西,钻研过逆向工程.VIPER 架构和组件化. 关于组件化的探讨已经有不少了,在之前的文章 iOS VIPER架构实践(三 ...

最新文章

  1. vs2015 ctrl 单击 转到定义
  2. dir结构体 linux_Linux下DIR,dirent,stat等结构体详解
  3. OpenInfra Days China 2020 官网正式上线,含免费注册通道!
  4. Mac查看占用端口进程
  5. 一个对象对应多个对象如何在一个界面里实现新增_谈MDM主数据管理系统设计和实现关键点...
  6. 数字信号处理实验集合
  7. python爬取公众号历史文章_微信公众号爬虫--历史文章
  8. 深棕颜色html的色号,棕色rgb颜色值 有谁知道咖啡色的RGB值?
  9. 1041: 数列求和2 C语言
  10. 微信小程序中使用地图
  11. MATLAB-数字图像处理 量化
  12. 《精益创业》- 天下大事必作于细,天下难事必作于易
  13. python做一个登录注册界面_Python 实现简单的登录注册界面
  14. html5 workers,HTML5 Web Workers
  15. Python零基础之自动登录12306
  16. 分布式文件系统HDFS实践及原理详解part3
  17. 小米AI魔法分身解密(二)
  18. HTML的简介、文档结构及基本标记
  19. android与H5交互调用js方法无效问题
  20. sfc 修复 xp rpc服务器,指定的错误代码是?0x000006ba?[RPC?服务器不可用。]

热门文章

  1. Linux命令:ps,netstat,top
  2. 使用go build 进行条件编译
  3. Linux rpm 命令参数使用详解[介绍和应用]
  4. k3s安装和卸载:轻量级K8S
  5. Java API访问HDFS集群(HA)
  6. Apollo读取某个集群的配置
  7. Scala代码案例:求ax2+bx+c=0方程的根
  8. Java客户端操作zookeeper:获取/节点的子节点代码示例
  9. @ConditionalOnClass注解的作用
  10. 创建容器时[Warning] IPv4 forwarding is disabled. Networking will not work.