Mirror用于获取任意类型的结构。
|
|
使用很简单,ok让我们看看他做了些什么
|
|
可以看到调用了Mirror(internalReflecting: subject)
进行初始化。
|
|
Ok,再来看看其中的几个函数:
|
|
|
|
|
|
|
|
他们都是调用call,并把我们需要mirror的value,以及value的type传入,最后调用个闭包之类的。
|
|
ok,从上可以看到,关键在于各种RelectionImple类的实现,我们找一个看看:
|
|
从上可以看出关键点在于我们的Meta信息,我们继续看下去:
|
|
|
|
|
|
|
|
我们编译时,会为每种类型生成他们的typemetadata。我们定义的每种类型都能找到他的typemetadata。反射就是从这些metadata中拿到成员变量数量,成员变量的offset等,然后根据这些信息,从我们传入的subject中获取到对应的value,然后组装成Mirror返回给我们。