在this question中,我正在寻找一种使用定义来确保变量属于某种类型的方法。但是有时候我有这种情况:
- (void) theSituation:(Thinger*)thinger {
ASSERT_IS_KIND_OF(thinger, Thinger);
// etc. etc.
然后我开始考虑,仅用于调试目的,能够调用如下代码可能会很好:
- (void) theSituation:(Thinger*)thinger {
ASSERT_INPUT_PARAMS_ARE_OF_CORRECT_TYPES();
// etc. etc.
问题是:您可以通过
isKindOf
检查方法的参数是否为正确的类型(使用#define
),以及如何(一般而言)执行此操作? 最佳答案
当您获得方法的参数时(使用另一个答案中提到的method_copyArgumentType
),它返回的“类型”要么是C类型(如int,float等),要么只是对象(返回为“@”)。可悲的是,不可能获得一种方法所期望的Objective-C类型-编译时信息会丢失。
找到类似问题的答案here。