Swift In Weex
weex iOS SDK 是使用Objective-C
,结合部分C
写的,
引入swift,需要混编,直接进入正题
SDK集成
- 使用cocoaPods 集成跟 使用Objetive-C 一样的集成方式
导入framework
- Import the framework you get above and import system framework
- Add
main.js
(which is in the WeexSDK.framework) to your main bundle - 添加
-ObjC
(注意大小写)
- Import the framework you get above and import system framework
- import
WeexSDK
就像Swift的module 一样
WeexSDK 已经在build setting 里面打开了define module
更多参考这里
module 扩展
因为module 暴露method 是通过Objective-C
宏来做的,调用的时候是通过反射,所以swift扩展module通过extension
Objective-C
的类,以下操作,可以直接在weex 的iOS playground 中进行
- 新建
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 中
#import <Foundation/Foundation.h> #import <WeexSDK/WeexSDK.h> @interface WXSwiftTestModule : NSObject <WXModuleProtocol> @end
WXSwiftTestModule.m 中
WeexDemo-Swift.h 这个文件需要编译一下才可以搜索到,具体的路径
weex/ios/playground/DerivedData/WeexDemo/Build/Intermediates/WeexDemo.build/Debug-iphonesimulator/WeexDemo.build/DerivedSources/WeexDemo-Swift.h
路径具体需要根据自己工程而定
#import "WXSwiftTestModule.h" #import "WeexDemo-Swift.h" // swift类和方法 被`Objective-C`识别需要导入 @implementation WXSwiftTestModule #pragma clang diagnostic push //关闭unknow selector的warrning #pragma clang diagnostic ignored "-Wundeclared-selector" WX_EXPORT_METHOD(@selector(printSome:callback:)) //swift中定义的方法,XCode 转换成的最终的方法名称,在`WeexDemo-Swift.h`里面查看 #pragma clang diagnostic pop @end
swift 中实现
扩展 OC的类WXSwiftTestModule
,增加了一个方法,这个方法就是我们要暴露出来,在js中可以调到的WXSwiftTestModule.swift
import Foundation public extension WXSwiftTestModule { public func printSome(someThing:String, callback:WXModuleCallback) { print(someThing) callback(someThing) } }
`WXSwiftTestModule` 和`WXModuleCallback` 因为是OC的,需要在`WeexDemo-Bridging-Header`中暴露
WeexDemo-Bridging-Header.h中
// // Use this file to import your target's public headers that you would like to expose to Swift. // #import "WXSwiftTestModule.h" #import "WeexSDK.h"
至此这个swift的简单的module 已经算是开发完成
module 使用
注册module
[WXSDKEngine registerModule:@"swifter" withClass:[WXSwiftTestModule class]];
we 文件中使用
<template> <text>Swift Module</text> </template> <script> require('weex-components'); module.exports = { data: { }, ready: function() { var swifter = require('@weex-module/swifter'); swifter.printSome("https://www.taobao.com",function(param){ nativeLog(param); }); } }; </script>