更新记录
1.0.0(2025-05-22)
- 首发,支持compose和SwiftUI
平台兼容性
Vue2 | Vue3 |
---|---|
√ | √ |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
HBuilderX 4.62,Android:5.0,iOS:13,HarmonyNext:不支持 | × | × | × | × | × | × |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 | 鸿蒙元服务 |
---|---|---|---|---|
× | × | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | × | × | × |
UTS环境兼容性
uni-app | uni-app x |
---|---|
√ | √ |
sn-compose-swiftui
sn-compose-swiftui组件是uts组件,兼容uniapp和uniapp-x
属性说明
属性 | 类型 | 默认值 | 说明 |
---|---|---|---|
composeId | string | '' | compose组件注册id |
swiftId | string | '' | SwiftUI组件注册id |
data | json | {} | 数据 |
使用
- App.vue/App.uvue导入
import { initNativeLayout } from '@/uni_modules/sn-compose-swiftui';
initNativeLayout();
- 代码示例
- nvue
<template>
<view style="flex: 1">
<sn-compose-swiftui composeId="BaseView" swiftId="BaseView" :data="cData" @event="onEvent" />
</view>
</template>
<script>
export default {
data() {
return {
cData: {
a: 1,
b: 'test'
}
};
},
onLoad() {
plus.navigator.closeSplashscreen();
},
methods: {
onEvent(e) {
const { detail } = e;
console.log('event', detail);
}
}
};
</script>
<style></style>
- uvue
<template>
<view style="flex: 1">
<sn-compose-swiftui composeId="BaseView" swiftId="BaseView" :data="cData" @event="onEvent" />
</view>
</template>
<script>
export default {
data() {
return {
cData: {
a: 1,
b: 'I am uvue'
}
};
},
onLoad() {},
methods: {
onEvent(e: any) {
console.log('event', e);
}
}
};
</script>
<style></style>
compose与SwiftUI组件扩展
写完代码,打包对应的aar和xcframework替换即可
注意:购买源码版获取,另外送uniapp开发工具,配合打包aar和xcframework更快
- compose
组件开发
class BaseView : BaseComposeUI() {
var viewModel = ExampleViewModel()
@Composable
fun MessageCard() {
val uiState by viewModel.uiState.collectAsState()
Column(
Modifier.fillMaxWidth()
) {
Text(text = "Hello")
Text(text = "compose")
Text(uiState.text)
Button(onClick = {
sendEvent("hello")
}) {
Text(text = "Click Me")
}
}
}
override fun loadComposeUI(view: ComposeView) {
view.setContent {
MessageCard()
}
}
override fun updateData(value: Map<String, Any?>) {
val v = value["b"] as String
viewModel.updateText(v)
}
}
注册
object SnUIManager {
fun registerAllUI() {
SnComposeUIManager.instance.registerUI("BaseView") { BaseView() }
}
}
- SwiftUI
组件开发
import Foundation
import SwiftUI
struct MySwiftUIView: View {
var body: some View {
VStack {
Text("Hello, SwiftUI!")
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
.background(Color.yellow)
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.yellow)
}
}
class BaseView : BaseSwiftUI<MySwiftUIView> {
override var swiftView: MySwiftUIView {
MySwiftUIView()
}
override func updateData(data: [String : Any]) {
print("data:\(data)")
}
}
注册
@objc
@objcMembers
open class SnUIManager : NSObject {
public static func registerAllUI() {
SnSwiftUIManager.instance.registerUI("BaseView") { BaseView() }
}
}