我正在用 Swift 构建一个库,它必须支持 Objective-C。
我已经查过了this answer建议用 Objective-C 编写库,但给我的要求是用 Swift 编写库。我以源代码形式提供库,因此那里关于不稳定 ABI 的论点(反对用 Swift 编写库)不应该适用于我的情况。
所以我听说,为了让这个 Swift 库适用于 Objective-C,我将不得不避免使用 Swift 中的高级功能,而这些功能在 Objective-C 中不可用。这些例子是:
- 泛型
- 结构
- 所有 Swift 类都必须派生自
NSObject
所以我的两个问题是:
- 我在哪里可以找到这些限制的详尽列表?
- 如何快速测试我的库是否与 Objective-C 兼容?我对 Swift 和 Objective-C 的互操作性主题一点都不熟悉。我在网上找不到的文章不多。 Apple 官方文档是否足够?哪些部分可以提供帮助?
非常感谢这里的所有帮助。
最佳答案
最全面的 Objective-C 不可用的 Swift 特性列表在 Swift Type Compatibility 中。苹果的一段Using Swift with Cocoa and Objective-C guide .
引用自那里,排除列表如下:
- 泛型
- 元组
- 在 Swift 中定义的没有 Int 原始值的枚举 输入
- Swift 中定义的结构
- Swift 中定义的顶级函数
- Swift 中定义的全局变量
- Swift 中定义的类型别名
- Swift 风格的可变参数
- 嵌套类型
- 柯里化(Currying)函数
whole guide值得一读,但我会特别注意 Mix and Match section它描述了从 Objective-C 调用 Swift,反之亦然,包括外部框架。
我肯定会建议按照@Mike Taverne 的建议去做:在 Objective-C 中制作一套单元测试,以测试您在 Swift 中开发的 API。这是确保一切按预期工作的最佳方式。
关于ios - 使 Swift OSS 库与 Objective-C 兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42401912/