使用 Swift 扩展 Weex
使用 Swift 扩展 Weex
参考完整 例子
#使用 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 中
#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 { @objc(printSome:callback:) public func printSome(someThing:String, callback:WXModuleCallback) { print(someThing) callback(someThing) } }
WXSwiftTestModule
和WXModuleCallback
因为是 OC 的,需要在WeexDemo-Bridging-Header
中暴露。注意:请在 Swift 文件中为方法添加
@objc
修饰符,避免找不到方法的报错。 -
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]];
-
前端脚本中用法
<template> <text>Swift Module</text> </template> <script> module.exports = { ready: function() { var swifter = weex.require('swifter'); swifter.printSome("https://www.taobao.com",function(param){ nativeLog(param); }); } }; </script>
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具