我正在Swift中构建一个库,它必须支持Objective-C。
我已经检查了this answer,它建议在Objective-C中编写库,但是给我的要求是在Swift中编写库。我以源代码形式提供库,因此在我的情况下不应该适用那些关于不稳定ABI的论点(反对在Swift中编写库)。
所以我听说为了让这个Swift库适用于Objective-C,我将不得不避免使用Swift中的Objective-C中没有的高级功能。这些例子包括:
NSObject
所以我的两个问题是:
我很欣赏这里的所有帮助。
答案 0 :(得分:5)
目标-C未提供的最全面的Swift功能列表位于Apple Swift Type Compatibility的Using Swift with Cocoa and Objective-C guide部分。
从那里引用,排除列表如下:
whole guide值得一读,但我要特别注意Mix and Match section,它描述了从Objective-C调用Swift,反之亦然,包括外部框架。
我肯定会建议做@Mike Taverne建议:在Objective-C中进行一系列单元测试,它们运用你在Swift中开发的API。这是确保一切按预期工作的最佳方式。
答案 1 :(得分:0)
还有很多事要事先知道。
因此,与使用目标c编写的api相比,它会受到更多限制,因为它支持泛型(尽管人们喜欢说不是真正的泛型等),并且无法扩展您在api中提供的任何类都可以也有很大的局限性,但仍然可行。
您只需要在所有地方放置@objc,编译器就会很快告诉您不支持的内容。有时候,强制转换也很棘手……我最终像这样强制转换,因为我是从swift代码中快速获取目标c泛型类
as! CSResponse<AnyObject> as! (CSResponse<AnyObject> & CSListData)
这是有效的代码,但是直接强制转换是不可能的。
最好是为swift编写纯swift,并根据需要使用目标c库,否则您将奋力编写一行代码。 (就像我一样:))