我有一个要在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
答案 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 */}