paj*_*vic 6 objective-c ios ios-frameworks swift ios-library
我需要为iOS(框架或静态库 - 我还没有决定)创建一个可以在Objective-C和Swift项目中使用的库.这样做的最佳方式是什么?我看到它的方式我有三个选择:
这里的主要要求是开发人员应尽可能轻松地使用它.理想情况下,他们应该能够选择他们的语言而不关心,或者甚至不知道图书馆本身的语言是什么.这可以做到吗?
此外,我希望能够使用CocoaPods分发库,如果这有任何意义.
选项2.没有问题(稍后详细说明)
选项3.如你所说,你应该真的避免它.
选项1是最好的.只需考虑Obj-C和Swift设计您的API.这是什么意思 ?
•不要使用选择器 - 它们不是Swift标准.
• 使用nullability转换为可选项
•闭包和块可能具有相同的语法,但略有不同,请注意:
Swift闭包和Objective-C块是兼容的,因此您可以将Swift闭包传递给期望块的Objective-C方法.Swift闭包和函数具有相同的类型,因此您甚至可以传递Swift函数的名称.
闭包具有与块类似的捕获语义,但在一个关键方式上有所不同:变量是可变的而不是复制的.换句话说,Objective-C中__block的行为是Swift中变量的默认行为.
来源:Apple 使用Swift与Cocoa和Objective-C - 它详细解释了所有内容.
在设计这样的API时,您必须知道所有内容是如何转换的,但如果您做得对,用户就不会注意到差异:)
确保x.framework
随附modules
文件夹和文件.
新Xcode为您生成它.这样,用户可以在Swift中使用您的Obj-C项目,而无需将其添加到桥接文件中.所以他们可以import myLib
开箱即用.
不幸的是,现在分发编译库的最明智的方法是在Objective-C中编写它.
这是因为一个重要原因:Swift Binary Compatiblity问题
虽然确保了应用程序的运行时兼容性,但Swift语言本身将继续发展,二进制接口也将发生变化.为了安全起见,应用程序的所有组件都应使用相同版本的Xcode和Swift编译器构建,以确保它们协同工作.
这意味着需要仔细管理框架.例如,如果您的项目使用框架与嵌入式扩展共享代码,您将需要一起构建框架,应用程序和扩展.依赖使用Swift的二进制框架是危险的 - 尤其是来自第三方的框架.随着Swift的变化,这些框架将与您的应用程序的其余部分不兼容.当二进制接口在一两年内稳定,雨燕运行时将成为主机操作系统的一部分,这个限制将不复存在.
PSPDFKit的创始人Peter Steinberger,也是一个作为编译库分发的库,遇到了同样的问题:他们现在一直坚持使用Obj-C而不能使用Swift.
归档时间: |
|
查看次数: |
1196 次 |
最近记录: |