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

  • 相关阅读:
    三种方式,实现多可系统外网访问
    osg + pbr(三)Pbr直射光,使用回调函数替代漫游器
    Java中VO、DO、PO、DTO之间的模型转换
    React之受控组件和非受控组件以及高阶组件
    Linux at任务调度机制
    Springboot项目修改文件传输(minio)限制大小
    金融权证行权
    开传奇需要什么技术要什么条件
    01 kafka 记录的存储
    Day2多种抓包工具介绍以及使用封包监听工具找到挑战数据包实现发送数据包进行挑战
  • 原文地址:https://blog.csdn.net/weixin_73000974/article/details/140359339