如何创建一个纯 Swift 模块
Swift是一门从零开始的创新的编程语言,用于iOS,OS X,watchOS,和tvOS应用的开发,它吸取了C以及Objective-C的优点,且不受C兼容性的限制。Swift采用安全编程模型,并添加了许多新的特性来使编程更加简单,更加灵活和有趣。Swift基于成熟而且流行的Cocoa和Cocoa Touch框架,这是我们重新定义了软件开发方法的一个好时机,
如果你已经开始接触Swift,你可能会考虑如何在Swift项目中加入第三方库,使项目运行得更好。Railsware.com的移动开发人员,Alex Denisov,iOS工程师和大量的开源粉丝,准备讨论一下这个问题。
苹果提供了一种机制通过框架来分发代码,所以使用ObjC和Swift代码来自定义一个框架库是非常简单的(对于iOS也一样)。接下来创建一个纯的Swift模块,就像苹果创建的Swift标准库和Cocoa/Cocoa Touch桥接库。
现在我们来创建一个简单的叫Logger的Swift模块,它只有一个方法:log。这个Swift模块至少要包含三个文件,文件列表如下:
Logger.swiftmodule - 公共接口的定义文件
Logger.swiftdoc - 文档文件
libLogger.a - 编译后的库文件(可能是一个动态库,这取决于你的工程任务)
我们现在开始创建一个Logger的库:
下面将使用"> "前缀来实例化这个Logger对象,并记录一些日志:
现在来创建libLooger.a文件,命令如下:
xcrun swift -emit-library -emit-object Logger.swift -sdk $(xcrun --show-sdk-path --sdk macosx) -module-nameLoggerar rcs libLogger.a Logger.o
-emit-library表示生成动态链接共享库,而使用-emit-object不仅会生成文件还会生成包含main方法,所以你会得到一个”Duplicate Symbol“的链接错误。
解决方法很简单:执行时,同时加入-emit-object和-emit-library两个参数,就像上面描述的命名一样。
接下来创建Logger.swiftdoc和Logger.swiftmoudle:
xcrun swift -emit-moduleLogger.swift -sdk$(xcrun --show-sdk-path --sdk macosx) -module-name Logger
至此我们有了一个完整的模块,可以添加到一个真实地工程里面了。创建一个简单地Swift的工程,添加下面的这些文件:
然后设置Swift的"Import paths"配置:
为了使你工程正常运行,你还需要导入刚创建的Logger模块:
瞧,程序成功运行了!
处理文档记录是非常简单的。添加文档记录到模块里面只需使用"///"来添加注释即可,例如:
集成后你将在Xcode的右边看到文档记录的相关信息。
注意:要想集成并使用一个新的模块,你需要重新启动Xcode。
这个方法有可能不适合常规的IOS/OSX开发,因为它必须创建和支持Make/CMake file,这个生成是比较复杂的。但是如果你想创建一个纯Swift模块,不使用任何Obj-C代码的话,那这就是很有用的方法。