Objective-C中的严格types检查第2部分
在这个问题中,我正在寻找一种方法来确保variables是使用define定义的某种types。 但有时候我有这种情况:
- (void) theSituation:(Thinger*)thinger { ASSERT_IS_KIND_OF(thinger, Thinger); // etc. etc.
然后我开始思考,只是为了debugging目的 ,可能会很高兴能够调用类似于:
- (void) theSituation:(Thinger*)thinger { ASSERT_INPUT_PARAMS_ARE_OF_CORRECT_TYPES(); // etc. etc.
问题是:你可以通过#define
检查一个方法的参数是否正确(使用isKindOf
),你将如何做(一般来说)?
当你得到一个方法的参数(使用method_copyArgumentType
在其他答案中提到),它返回的“types”是Ctypes(如int,float等)或只是Object(返回为“@”)。 可悲的是,不可能获得一种方法期望的Objective-Ctypes – 编译时会丢失信息。
回答这里find的类似问题。
嗯…有趣的问题。 我有一些应该工作的东西(theoratically)。
您可以使用__func__
获取正在执行的函数名称。 (看这个 )
你可以从一个string中获得Selector:
SEL selector = selectorFromString(@"doWork");
您可以使用客观的C运行时获得一个类的实例的Method对象。
Method *m = class_getInstanceMethod(self, selector);
你可以从下面获得一个方法的参数个数:
method_getNumberOfArguments
你可以使用参数types
method_copyArgumentType
从这里你应该可以断言。
我知道,远射 – 我没有试图运行代码。 如果我马上loginMac,我会更新答案。