我有一个要在 Swift 项目中使用的 Objective-C 类。
此类中的一些方法不适合 Swift,在我看来,最简单的解决方案是使用略有不同的替代方法来在 Swift 中使用。
例如。当前方法:
+(void)doSomethingWithFormat:(NSString*)format,...;
例如。新方法:
+(void)doSomethingWithString:(NSString*)string;
这很好用,但我的问题是新方法将在 Objective-C 项目中可用,在这些项目中并不真正需要它,只会弄乱代码完成菜单。
我的问题: 有没有办法将所有新方法标记为仅在 Swift 中可用而不在 Objective-C 中可用?
编辑: 我所希望的是
@available(swift,*)
+(void)doSomethingWithString:(NSString*)string;
或
#if SWIFT
+(void)doSomethingWithString:(NSString*)string;
#endif
最佳答案
您正在寻找的是 NS_SWIFT_UNAVAILABLE
的对立面,Apple 提供它来使 Swift 无法使用 Objective-C API。有一个 NS_UNAVAILABLE
使 API 在两者中都不可用,bot 而不是 NS_OBJC_UNAVAILABLE
。
回答结束。我将拒绝发布以下内容 ;-)
在下面的 Objective-C 中看到 bar
,Swift 看到 bar()
和 foo()
...
@interface Foo : NSObject
- (void) bar;
- (void) /*__*//*__ between these comments there is a zero-wdith non-joiner character U+200D */ NS_SWIFT_NAME(foo());
@end
是的,您似乎可以使用零宽度非连接字符在 Objective-C 中命名一个方法。你不会在自动完成中看到这个,你会看到一个空白!
我现在将面对角落并重复“我不会给方法起不可见的奇怪名称”1000 次 ;-)
关于objective-c - 我可以将 Objective-C 方法标记为仅可用于 Swift 类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53248014/