2016-10-18 51 views
2

我在頭文件Test.h下面的代碼:NS_SWIFT_NAME基本名稱校驗錯誤

#import <Foundation/Foundation.h> 

@interface Test : NSObject 

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

@end 

這裏是我的執行文件:

#import "Test.h" 

@implementation Test 

- (void)test { 
    return; 
} 

@end 

然後我嘗試導入該接口到我的swift源代碼,但我得到以下警告:'swift_name'屬性具有無效的基本名稱標識和該函數的swift名仍然是測試。其他名稱,如驗證verify1工作很棒。 有什麼想法?

回答

3

verify<usr/include/AssertMacros.h>定義爲宏:

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

在另一個宏__Verify條款。因此,編譯器 預處理的定義(你可以用 產品檢驗 - >執行操作 - >預處理「Test.m」)

- (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)"))); 

這絕對不是一個有效斯威夫特的名字。

使用不同的名稱將是最簡單的解決方案。否則#undef宏 是一種解決方法:

@interface Test : NSObject 

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

@end