Kotlin MultiPlatform(KMP)

Kotlin MultiPlatform

在这里插入图片描述

1.KMP 是什么

Kotlin Multiplatform 是一个工具,它让我们用同一种编程语言(Kotlin)写代码,这些代码可以同时在不同的设备上运行,比如手机、电脑和网页。这样做可以节省时间,因为你不需要为每种设备重复写相同的功能。

2.有什么特性

特性1:代码共享–可以编写一次逻辑代码,比如一个计算函数,然后在 Android 和 iOS 应用中都使用它。
特性2:平台特定代码–可以为每个平台编写特定的代码来处理平台独有的功能,比如使用设备的摄像头。比如在 Android 应用中使用 Android 的 Camera API 拍照,在 iOS 应用中使用 iOS 的 UIImagePickerController 拍照。
特性3:互操作性–Kotlin Multiplatform 可以与现有的 Java、Swift 或 Objective-C 代码互操作,方便集成到现有项目中。
特性4:编译期不同–在androidMain的代码用的是kotlin/jvm编译成安卓可以看懂的代码, 在iosMain上用kotlin/native编译成ios可以看懂的代码

3功能如何跨端

步骤:
1.定义共享逻辑:首先在一个共享模块(也就是commonMain)中定义通用的业务逻辑,这些代码不依赖任何平台,因此可以在任何平台上运行,这个共享模块也相当于跨端共享的基础、
共享逻辑(commonMain):

import kotlin.random.Random
class Greeting {private val platform: Platform = getPlatform()fun greet(): String {val firstWord = if (Random.nextBoolean()) "Hi!" else "Hello!"return "$firstWord Guess what this is! > ${platform.name.reversed()}!"}
}

以上代码就是kmp跨端中的共享代码,这些代码在安卓和ios都可以运行,只不过,这段代码最后返回了一个字符串格式,这个字符串中还需要获取到platform.name,这就需要涉及到跨端了,因为获取到platform.name的方式在安卓和ios上的kotlin语法不一样,于是我们就要定义一个借口来告诉androidMain和iosMain,你俩把这个获取platform.name的逻辑分别给我处理一下,然后他俩就开始去实现这个逻辑了,代码如下

interface Platform {val name: String
}expect fun getPlatform(): Platform

2.平台的特定实现:在androidMain和iosMain中,提供commanMain中接口的具体实现,以及编写一些平台性的特定需求的代码
Android 平台实现(androidMain):

import android.os.Buildclass AndroidPlatform : Platform {override val name: String = "Android ${Build.VERSION.SDK_INT}"
}actual fun getPlatform(): Platform = AndroidPlatform()

iOS 平台实现(iosMain):

import platform.UIKit.UIDeviceclass IOSPlatform: Platform {override val name: String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion
}actual fun getPlatform(): Platform = IOSPlatform()

他俩乖乖的说,好嘞大哥,我们给你实现,安卓那边说,大哥,我是这么实现的,ios说,大哥,我是那样实现的~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1、项目目录设计

文章目录 前言一、项目目录设计 前言 本项目我们将会完成一个Go项目开发框架,该项目不会包含具体的CRUD业务代码,而是从头搭建一个工作中实用的开发框架。让开发者能够熟悉整个项目的搭建流程,能够独立完成项目从0到1的搭建,而且…

【RHCE】实验(HTTP,DNS,SELinux,firewalld的运用)

一、题目 二、主服务器配置 1.下载HTTP服务,DNS服务 [rootlocalhost ~]# yum install -y httpd bind 2.开启防火墙,放行服务 # 开启防火墙 [rootlocalhost ~]# systemctl start firewalld # 放行服务 [rootlocalhost ~]# firewall-cmd --add-service…

上班摸鱼吗?一文详解代码生成神器-Velocity

引言 “我不是在教你学坏,而是教你如何提高生产效率。” ----------- 牛顿 人类社会能够一直进步发展出现在的文明世界,最大的一个原因就是这个世界上懒人居多,懒人为了偷懒就需要提高生产效率,效率提高节省下来的时间才能创造出艺术、娱乐以及更高效率的科学技术。程序员…

MySQL DDL

数据库 1 创建数据库 CREATE DATABASE 数据库名 CREATE DATABASE IF NOT EXISTS 数据库名;(判断是否存在) CREATE DATABASE 数据库名 CHARACTER SET 字符 2 查看数据库 SHOW DATABASES; 查看某个数据库的信息 SHOW CAEATE DATABASE 数据库名 3 修改数据库 …

信息学奥赛初赛天天练-44-CSP-J2020基础题-排列组合、乘法原理、捆绑法、隔板法、排除法示例及应用

PDF文档公众号回复关键字:20240711 2020 CSP-J 选择题 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 10.有5 个小朋友并排站成一列,其中有两个小朋友是双胞胎,如果要求这…

dev小熊猫,clion设置模版教程

首先点击工具 然后进入设置 ,找到代码模版 然后点击c模版,进入之后直接输入模版之后,(还没有结束!!!),先点击应用,然后是确定!!&#…

【js面试题】深入理解浏览器对象模型(BOM)

面试题:请你说说对bom的理解,常见的bom对象你了解哪些 引言: 浏览器对象模型(BOM)是JavaScript中用于与浏览器窗口及其内容进行交互的一组对象和方法。 BOM的核心是window对象,它代表了浏览器窗口本身&…

【SQL】DML、DDL、ROLLBACK 、COMMIT详解

DML DML(Data Manipulation Language)数据操作语言,是用于对数据库中的数据进行基本操作的一种编程语言。DML是数据库管理系统(DBMS)中的一个重要部分,它允许用户或应用程序对数据库中的数据进行增、删、改…

探索GitHub上的两个革命性开源项目

在数字世界中,总有一些项目能够以其创新性和实用性脱颖而出,吸引全球开发者的目光。今天,我们将深入探索GitHub上的两个令人惊叹的开源项目:Comic Translate和GPTPDF,它们不仅改变了我们处理信息的方式,还极大地丰富了我们的数字生活体验。 01 漫画爱好者的福音:Comi…

PostgreSQl 物化视图

物化视图(Materialized View)是 PostgreSQL 提供的一个扩展功能,它是介于视图和表之间的一种对象。 物化视图和视图的最大区别是它不仅存储定义中的查询语句,而且可以像表一样存储数据。物化视图和表的最大区别是它不支持 INSERT…

Windows 电脑查看 WiFi 密码的方法都有哪些?

从设置面板中查看 当你使用的是笔记本电脑并且连接 WiFi 之后可以在设置面板中查看 WiFi 密码,首先打开设置界面,然后点击网络和 Internet,找到 WiFi 之后点击进入,然后点击管理已知网络。 然后点击已经连接好的无线网络。 进入之…

SpringBoot 3.3 【一】手把手讲解-使用Eclipse创建第一个SpringBoot应用程序

简单动作,深刻联结。在这技术海洋,我备好舟,等你扬帆。启航吧! 🌟点击【关注】,解锁定期的技术惊喜,让灵感与知识的源泉不断涌动。 👍一个【点赞】,如同心照不宣的默契&a…

AI工具,如何通过 GPT-4o 提高工作效率

文章目录 引言一、理解GPT-4o及其功能二、如何利用GPT-4o提高工作效率1. 代码生成与优化2. 自动化测试与调试3. 技术文档撰写与知识管理 三、实际案例与成功应用1. GitHub 协作与问题解决2. 敏捷开发与迭代优化 四、GPT-4o的挑战与应对策略五、未来展望与发展方向六、结论 &…

保护企业数据资产的策略与实践:数据安全治理技术之实战篇!

在上篇文章中,我们深入讨论了数据安全治理技术的前期准备工作,包括从建立数据安全运维体系、敏感数据识别、数据的分类与分级到身份认等方面的详细规划和设计。这些准备工作是实现数据安全治理的基础,它们为企业建立起一套系统化、标准化的数…

二进制补码计算

基本知识 原码(Sign and Magnitude):原码是一种最简单的表示法,使用符号位和数值位来表示整数。 符号位:最高位是符号位,0表示正数,1表示负数。 数值位:剩下的位表示数值的大小。反码&#xf…

windows11下vscode配置C/C++(过程记录)

一、概述 一直想在Windows11系统下使用vscode运行C/C程序,如果使用visual studio的话需要占用大量内存,且每次启动较慢。vscode则可以省去大多数烦恼。 二、具体配置过程 (一)参考博客 主要参考两篇博客,分别如下所示…

kubernetes集群如何更改所有节点IP

kubernetes集群如何更改所有节点IP 情景描述更换IP前的准备工作更换IP后的工作--master更换IP后的工作--node节点重新部署之前那些服务 情景描述 我有三台服务器,想要将其组成了一个kubernetes集群,在部署之前,我就对其进行了固定IP的操作&a…

ARM功耗管理之多核处理器启动

安全之安全(security)博客目录导读 思考:SecureBoot?多核处理器启动流程?PSCI启动方式? 一般嵌入式系统使用的都是对称多处理器(Symmetric Multi-Processor, SMP)系统,包含了多个cpu, 这几个cp…

MICCAI 2024Centerline Boundary Dice Loss for Vascular Segmentation

MICCAI 2024 Centerline Boundary Dice Loss for Vascular Segmentation MICCAI 2024Centerline Boundary Dice Loss for Vascular Segmentation中心线边界Dice损失用于血管分割**摘要**:1. 引言相关工作: 2. 方法预备知识Dice的变化 3 实验3.1 数据集3.2 设置3.3 结…

推荐一个比 Jenkins 使用更简单的项目构建和部署工具

最近发现了一个比 Jenkins 使用更简单的项目构建和部署工具,完全可以满足个人以及一些小企业的需求,分享一下。 项目介绍 Jpom 是一款 Java 开发的简单轻量的低侵入式在线构建、自动部署、日常运维、项目监控软件。 日常开发中,Jpom 可以解…