我可以将Objective-C方法标记为仅对Swift类可用吗?

时间:2018-11-11 10:54:43

标签: objective-c swift

我有一个要在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

2 个答案:

答案 0 :(得分:3)

您要寻找的是与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遍;-)

答案 1 :(得分:1)

我建议在Swift文件中使用ObjC类的扩展名。

我的意思是,在ObjC中创建您的类MyClass: NSObject ...

在Swift文件中使用:

extension MyClass { /* your methods */}