欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
是的,GitCode 上的 UniMPSwiftDemo 是一个极简的 Swift 集成示例,主要演示宿主 App 如何启动 uni 小程序,因此没有包含扩展 Module 的代码。
如果你需要在 uni 小程序中与原生 iOS 代码通信(调用原生功能),需要手动扩展 Module。以下是基于官方文档的实现方案:
1. 扩展 Module 实现步骤
创建 Module 类(继承 NSObject,遵循 WXModuleProtocol):
import Foundation
import WeexSDK
class TestModule: NSObject, WXModuleProtocol {
// 异步方法(通过 callback 回调)
@objc func testAsyncFunc(_ options: [String: Any], callback: @escaping WXModuleKeepAliveCallback) {
print("收到参数: \(options)")
// 回调给小程序:第一个参数是数据,第二个参数表示是否支持多次回调
callback(["code": "success", "data": "from native"], false)
}
// 同步方法(直接返回值)
@objc func testSyncFunc(_ options: [String: Any]) -> String {
print("同步调用: \(options)")
return "sync success"
}
// 必须实现:将方法暴露给 JS
static func moduleMethodMap() -> [String: String] {
return [
"testAsyncFunc:callback:": "testAsyncFunc",
"testSyncFunc:": "testSyncFunc"
]
}
}
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
注册 Module(在 AppDelegate 中,初始化 SDK 后):
import WeexSDK
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 初始化 DCUniMPSDKEngine
DCUniMPSDKEngine.initSDKEnvironment(launchOptions: launchOptions)
// 注册 Module(name 需唯一,与小程序端调用名一致)
WXSDKEngine.registerModule("TestModule", with: NSClassFromString("TestModule"))
return true
}
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
2. 小程序端调用
在 uni 小程序(Vue/NVue)中通过 uni.requireNativePlugin 调用:
// 获取 Module
const testModule = uni.requireNativePlugin("TestModule")
// 调用异步方法
testModule.testAsyncFunc({
name: 'unimp',
age: 1
}, (ret) => {
console.log('原生回调:', ret) // 输出: {code: "success", data: "from native"}
})
// 调用同步方法
const result = testModule.testSyncFunc({name: 'test'})
console.log('同步返回:', result) // 输出: sync success
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
3. 关键注意事项
- 线程安全:异步方法默认在 UI 线程执行,同步方法在 JS 线程执行,注意线程切换
- 数据类型:回调仅支持
String 或 NSDictionary(Map)类型
- 审核风险:避免在 Module 中使用
dlopen()、dlsym()、performSelector: 等动态方法,以免 App Store 审核被拒
- 完整示例:建议下载完整的 uni小程序SDK,其中包含带
TestModule 的完整 Demo 工程
如果 SDK 内置功能仍不满足需求,也可以前往 DCloud 插件市场 搜索是否有现成的原生插件可直接集成。
2 个回复
少林寺方丈嘿嘿 (作者) - 厉害了吧
这个AI回答的毫无用处啊
Ask小助手
是的,GitCode 上的 UniMPSwiftDemo 是一个极简的 Swift 集成示例,主要演示宿主 App 如何启动 uni 小程序,因此没有包含扩展 Module 的代码。
如果你需要在 uni 小程序中与原生 iOS 代码通信(调用原生功能),需要手动扩展 Module。以下是基于官方文档的实现方案:
1. 扩展 Module 实现步骤
创建 Module 类(继承
NSObject,遵循WXModuleProtocol):注册 Module(在 AppDelegate 中,初始化 SDK 后):
2. 小程序端调用
在 uni 小程序(Vue/NVue)中通过
uni.requireNativePlugin调用:3. 关键注意事项
String或NSDictionary(Map)类型dlopen()、dlsym()、performSelector:等动态方法,以免 App Store 审核被拒TestModule的完整 Demo 工程如果 SDK 内置功能仍不满足需求,也可以前往 DCloud 插件市场 搜索是否有现成的原生插件可直接集成。
要回复问题请先登录或注册
公告
更多>相关问题