Tag: reflection

如何告诉编译器一个属性只有存在才被访问?

我可以使用HasProperty来检查属性是否存在。 只有在属性存在的情况下,才能执行一个方法。 即使属性不存在,编译器如何成功编译? 例如 if (UIApplication.SharedApplication.Delegate.HasProperty("Instance")) { AppDelegate customAppDelegate = UIApplication.SharedApplication.Delegate as AppDelegate; customAppDelegate.Instance.SomeMethod(true); // can't be compiled because Instance doesn't exist } 事情是这样的:首先,我检查是否存在这个动词。 如果是,我执行我的方法。 所以通常情况下代码是从不执行的(除了属性存在),但编译器无法区分这一点。 它只检查属性是否存在,不考虑if子句。 有这个解决scheme吗?

实例化存储在metatype字典中的类

我已经按照制作一个Swift字典的关键是“types”的解决scheme? 创build可以使用类types作为键的字典。 我想要做的是:我有一个字典,应该存储类types与他们的类types(又名元types)作为键: class MyScenario { static var metatype:Metatype<MyScenario> { return Metatype(self) } } var scenarioClasses:[Metatype<MyScenario>: MyScenario.Type] = [:] 然后我有方法来注册和执行scheme: public func registerScenario(scenarioID:MyScenario.Type) { if (scenarioClasses[scenarioID.metatype] == nil) { scenarioClasses[scenarioID.metatype] = scenarioID } } public func executeScenario(scenarioID:MyScenario.Type) { if let scenarioClass = scenarioClasses[scenarioID.metatype] { let scenario = scenarioClass() } } 问题是在最后一行: 使用元types值构造类types为“MyScenario”的对象必须使用“必需的”初始值设定项。 看起来编译器很困惑,因为我不能在这个任务中使用'required'。 有没有人有一个想法,我将不得不在executeScenario()实例化scenarioClass ?

防止在iOS上reflection(objc /运行时)

我正在处理敏感数据的静态库。 使用库的开发人员不能在库上使用reflection。 在Android上,我们通过开发带有service的aar文件来解决问题,并将service运行到单独的进程中(当服务运行到另一个进程中时,开发人员不能使用reflection),但是我想知道如果iOS中存在类似的东西? 我们可以执行一个静态库到一个单独的进程? 如果没有,我们如何避免反思我们的静态库? 例如: MyTestObject *obj = [[[myTestView alloc] init ]; //=========================================== Class clazz = [obj class]; u_int count; Ivar* ivars = class_copyIvarList(clazz, &count); NSMutableArray* ivarArray = [NSMutableArray arrayWithCapacity:count]; for (int i = 0; i < count ; i++) { const char* ivarName = ivar_getName(ivars[i]); [ivarArray addObject:[NSString stringWithCString:ivarName encoding:NSUTF8StringEncoding]]; } free(ivars); objc_property_t* properties […]

Objective C可以在运行时(reflection)确定调用者对象引用吗?

据我所知目标C是比C#或Java更dynamic的语言。 在C#中,只能知道调用者对象的类(使用堆栈跟踪),而不知道调用者本身的实例引用。 Objective C更适合这个吗? 更新:我看了这里的另一篇文章如何确定我的方法在Objective-C中的“调用者”? 。 据我了解,只有类名。 我坚持认为我不只是通过类名感兴趣,而是通过获取调用者实例本身。