• 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说,大哥,我是那样实现的~~~

  • 相关阅读:
    Docker 容器跨主机通信 - Flannel
    VUE的列表渲染
    【缓存】OS层面缓存设计机制
    分享一下怎么做一个积分兑换商品的微信小程序
    Linux基础:2:shell外壳+文件权限
    数据结构——二叉树的公共祖先问题
    除了参数,ref关键字还可以用在什么地方?
    2.SQL表格属性
    windows Vscode 连接 虚拟机,超详细,含免密免ip配置 以 linux 虚拟机为例
    Spring事务:@Transactional注解详解
  • 原文地址:https://blog.csdn.net/weixin_73000974/article/details/140359339