首页 > 其他分享 >swift通过Mirror访问对象所有的存储属性

swift通过Mirror访问对象所有的存储属性

时间:2024-04-18 18:55:06浏览次数:17  
标签:存储 String age Mirror address var swift name

Mirror

用途: 获取到对象的全部属性的key、value。

示例:

点击查看代码


class Person {
  private var name: String
  private var age: Int
  var address: String

  var saySomething: String {
    return "hello world"
  }

  init(name: String, age: Int, address: String) {
    self.name = name
    self.age = age
    self.address = address
  }
}

class Student: Person {
  var stuId: String
  private var school = "清华"

  var cla: String {
    "三年二班"
  }

  init(name: String, age: Int, address: String, stuId: String) {
    self.stuId = stuId
    super.init(name: name, age: age, address: address)
  }
}

let stu = Student.init(name: "John", age: 30, address: "123 Main St", stuId: "123")

let kvs = Mirror.init(reflecting: stu).children

var result: [String: Any] = [:]
for kv in kvs {
        guard let key = kv.label as? String else { continue }
    result[key] = kv.value
}

print(result) // 打印结果:["school": "清华", "stuId": "123"]

结论

上述代码中,我们创建了一个Person类以及继承自Person类的Student类,通过Student类创建了一个stu对象,通过最终的打印结果不难发现:

  1. 继承来的属性不会被Mirror访问到
  2. Mirror只能访问存储属性,无法访问计算属性
  3. 属性的访问权限对Mirror没有影响,private修饰的计算属性也会被Mirror反射到

标签:存储,String,age,Mirror,address,var,swift,name
From: https://www.cnblogs.com/rainyDD/p/18144211

相关文章

  • 智慧煤矿/智慧矿区视频汇聚存储与安全风险智能分析平台建设思路
    一、建设背景目前我国非常重视煤矿安全生产,并投入大量资金用于煤矿安全综合远程监控系统的研发。视频监控系统作为实现煤矿智能化无人开采的关键系统与煤矿安全生产的多系统协同分析与处理的关键信息源,在智慧矿山管控平台的建设中发挥着重要的作用。作为全矿区的视频整合平台,是......
  • 7-02.创建游戏数据存储结构框架
    安装Newtonsoft-jsoncom.unity.nuget.newtonsoft-json创建GameSaveData创建ISaveable创建SaveLoadManager修改ISaveable创建DataGUID修改ISaveable给Player绑定GUID运行,然后停止,然后再运行,这时GUID就一直存在了修改Player脚本给所有Ma......
  • c++ std::string能否存储二进制字符以及'\0'字符?
    c++的字符串类std::string能否存储二进制字符以及字符'\0'?要解决这个问题,我们首先要了解c++的std::string的存储结构。(注意不同的平台下C++规范对std::string的实现不完全一致,例如sizeof(std::string)在linuxx64gcc-4.4下的输出是8,而在macgcc4.2下的输出是24;这篇文章以Li......
  • 海康威视添加NAS存储
    1、关闭防火墙iptables-Fsetenforce0systemctlstopfirewalldsystemctldisablefirewalld2、创建目录mkdir-p/data/HaiKangData3T3、格式化硬盘mkfs.xfs/dev/sdb-f4、挂载blkidvim/etc/fstabUUID="5faf3a9b-fc2a-483b-a3ae-f0e00717a233/data/HaiKangData3T......
  • golang etcd键值存储系统
    目录存储配置文件watch命令在Go语言中,etcd是一个高可用的键值存储系统,它主要用于共享配置和服务发现。etcd由CoreOS团队开发,它是Kubernetes项目中用于存储所有集群数据的关键组件。etcd使用Raft协议来保持集群之间的数据一致性,并且提供了强一致性保证https://blog.csdn.net/jo......
  • MySQL存储引擎
    MySQL存储引擎存储引擎就是存储数据,建立索引,更新查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以称为表类型。查看存储引擎showengines;查看数据库默认存储引擎showvariableslike'%storage_engine%';MySQL存储引擎特性MySQL5.5之前......
  • MySQL存储过程与函数
    MySQL存储过程与函数存储过程创建、调用、删除创建CREATEPROCEDURE存储过程名(参数列表)BEGIN--SQL语句END;调用CALL存储过程名(参数值);删除DROPPROCEDUREIFEXISTS存储过程名;函数创建、调用、删除创建CREATEFUNCTION函数名(参数列表)RETURNS返......
  • C:\Windows\servicing\Packages 是一个存储 Windows 更新程序包的目录。Windows 操
    C:\Windows\servicing目录包含了与Windows维护和更新相关的文件和子目录。让我们逐个解释一下每个子目录和文件的作用:CbsApi.dll和CbsMsg.dll:这两个DLL文件是Windows组件基础服务(CBS)的一部分。CBS是Windows中用于安装、卸载、维护和更新组件的服务。这些D......
  • c# sqlserver向存储过程传入xml数据
    c#代码:点击查看代码varxmlData=newXDocument(newXElement("Data",query.weldPlanList.Select(r=>newXElement("Row",newXAttribute("APSFactoryID",query.APSFactoryID),......
  • 定义存储过程和函数
    定义存储过程和函数本文出处:https://www.modb.pro/db/222642学习地址https://www.modb.pro/course/133学习目标学习openGauss定义存储过程和函数课后作业1.创建带有入参和出参的函数1,调用函数时使用按参数值传递和命名标记法传参omm=#createfunctionfunc_multiply(......