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

标签 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

最佳答案

您正在寻找的是 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/

相关文章:

ios - 如何以编程方式更改 UITableView 的类?

ios - 边界更改时无法阻止 UITableView 移动

ios - Swift 动态创建的 UILabel 显示两次

swift - 如何替换字符串中的特定字符?

swift - 如何在 Swift 中使用 try-catch?

ios - 在 Swift 中将函数作为参数传递

ios - 如何在iOS中基于String动态调整UITextview高度

ios - 糟糕的 UITableView 滚动性能问题 iOS 7

ios - 检查对象是否不是 swift 类型

ios - 解析好友请求处理