NS_SWIFT_NAME基本名称验证错误

时间:2016-10-18 14:34:57

标签: objective-c swift swift3

我的头文件 Test.h 中有以下代码:

#import <Foundation/Foundation.h>

@interface Test : NSObject

- (void)test NS_SWIFT_NAME(verify());

@end

这是我的实施文件:

#import "Test.h"

@implementation Test

- (void)test {
    return;
}

@end

然后我尝试将此界面导入我的swift源代码,但是我收到以下警告:&#39; swift_name&#39;属性具有基本名称的无效标识符,此函数的swift名称仍为 test 。其他名称如 verif verify1 的效果非常好。 有什么想法吗?

1 个答案:

答案 0 :(得分:3)

verify被定义为<usr/include/AssertMacros.h>中的宏:

#ifndef verify
    #define verify(assertion) __Verify(assertion)
#endif

就另一个宏__Verify而言。结果,编译器 预处理定义(正如您可以验证的那样) 产品 - &gt;执行操作 - &gt;预处理&#34; Test.m&#34;)

- (void)test __attribute__((swift_name("do { if ( __builtin_expect(!(), 0) ) { DebugAssert('?*?*', 0, \"Third Party Client\" \": \" \"\", 0, 0, \"/PathTo/Test.h\", 22, (void*)0); } } while ( 0 )")));

这绝对不是一个有效的Swift名称。

使用其他名称将是最简单的解决方案。否则#undef宏 是一种解决方法:

@interface Test : NSObject

#undef verify
- (void)test NS_SWIFT_NAME(verify());

@end