更新记录

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 {} 数据

使用

  1. App.vue/App.uvue导入
import { initNativeLayout } from '@/uni_modules/sn-compose-swiftui';
initNativeLayout();
  1. 代码示例
  • 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更快

  1. 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() }
    }

}
  1. 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() }
    }

}

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问