使用 Swift 扩展 Weex
Swift和Objective-C 混编 参考完整 例子
使用 Swift 进行 module 扩展
因为 module 暴露 method 是通过Objective-C宏来做的,调用的时候是通过反射,所以Swift扩展 module 通过extension Objective-C的类。
* 新建 WXSwiftTestModule.h/m 和 WXSwiftTestModule.swift文件, 在新建Swift文件的时候会提示
选择 Create Bridging Header, 因为我们要在 Swift 中访问 Objective-C 的一些类,正是通过这个 header暴露 OC 的类给 Swift,header 格式为 yourTarget-Bridging-Header.h,我这里创建完header文件名称为:WeexDemo-Bridging-Header.h
* WXSwiftTestModule.h/m中实现
* WXSwiftTestModule.h 中
1. #import Objective-C 识别需要导入
3. 4. @implementation WXSwiftTestModule
5. #pragma clang diagnostic push //关闭unknow selector的warrning
6. #pragma clang diagnostic ignored "-Wundeclared-selector"
7. 8. WX_EXPORT_METHOD(@selector(printSome:callback:)) //Swift 中定义的方法,XCode 转换成的最终的方法名称,在WeexDemo-Swift.h里面查看
9. 10. #pragma clang diagnostic pop
11. 12. @end
* Swift 中实现扩展 OC 的类 WXSwiftTestModule,增加了一个方法,这个方法就是我们要暴露出来,在 js 中可以调到的
* WXSwiftTestModule.swift
1. import Foundation
2. public extension WXSwiftTestModule {
3. public func printSome(someThing:String, callback:WXModuleCallback) {
4. print(someThing)
5. callback(someThing)
6. }
7. }
WXSwiftTestModule 和WXModuleCallback 因为是 OC 的,需要在 WeexDemo-Bridging-Header 中暴露
* WeexDemo-Bridging-Header.h中
1. //
2. // Use this file to import your target's public headers that you would like to expose to Swift.
3. //
4. #import "WXSwiftTestModule.h"
5. #import "WeexSDK.h"
至此这个使用 Swift 开发的简单的 module 已经完成
module 使用
* 注册 module
1. [WXSDKEngine registerModule:@"swifter" withClass:[WXSwiftTestModule class]];
* 前端脚本中用法
1. <template>
2. <text>Swift Module</text>
3. </template>
4. 5. <script>
6. module.exports = {
7. ready: function() {
8. var swifter = weex.require('swifter');
9. swifter.printSome("https://www.taobao.com",function(param){
10. nativeLog(param);
11. });
12. }
13. 14. };
15. </script>
