• 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.Build
    
    class AndroidPlatform : Platform {
        override val name: String = "Android ${Build.VERSION.SDK_INT}"
    }
    
    actual fun getPlatform(): Platform = AndroidPlatform()
    
    

    iOS 平台实现(iosMain):

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

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

  • 相关阅读:
    数字化转型的同群效应数据集(2007-2021年)
    在Qt中怎么操作MySQL数据库
    CentOS 7 安装和配置java环境
    windows系统pycharm程序通过urllib下载权重https报错解决
    基于鲸鱼算法的无人机航迹规划-附代码
    Cocos Creator3.8 项目实战(六)Combobox控件的实现和使用
    transformer原理及各领域应用分析
    vue 在什么情况下在数据发生改变的时候不会触发视图更新
    VMware虚拟机安装macOS报错问题解决:客户机操作系统已禁用CPU,请关闭或重置虚拟机
    【21天python打卡】第7天 面向对象编程(2)
  • 原文地址:https://blog.csdn.net/weixin_73000974/article/details/140359339