我正在Swift中构建一个库,它必须支持Objective-C。
我已经检查了this answer,它建议在Objective-C中编写库,但是给我的要求是在Swift中编写库。我以源代码形式提供库,因此在我的情况下不应该适用那些关于不稳定ABI的论点(反对在Swift中编写库)。
所以我听说为了使这个Swift库适用于Objective-C,我将不得不避免使用Swift中的Objective-C中没有的高级功能。这些例子是:
NSObject
所以我的两个问题是:
我很感激这里的所有帮助。
Objective-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。这是确保一切按预期工作的最佳方式。
事先要了解更多事情。
所以api比用目标c写的更有限,因为它支持泛型(虽然人们喜欢说不是真正的泛型等等)而且不能扩展你在api中提供的任何类也可能是非常有限的,但它仍然可行。
你只需要将@objc放在任何地方,编译器会很快地告诉你什么不支持。另外,有时候施法可能非常棘手......我最终会像这样投射,因为我在swift代码中从swift中恢复了目标c泛型类
as! CSResponse<AnyObject> as! (CSResponse<AnyObject> & CSListData)
这是工作代码,但直接演员是不可能的。
最好是为swift编写纯swift并根据需要使用目标c libs,否则你将努力编写一行代码。 (像我这样的 :))