KMM用纯Kotlin编写一次代码,即可在iOS和Android上运行,开发应用的公共业务逻辑只需要编写一次。KMM减少了为不同平台编写和维护相同代码所花费的时间。...[项目结构.png] 三、使用expect/actual编写平台特定的代码 以打印日志为例,打造一个alog日志SDK 在commonMain定义IALog接口,声明fun v函数,其他函数忽略。...五、声明Android/iOS公共接口以及独有接口 用expect修饰commonMain中声明公共的接口 expect interface IALog { fun v(tag: String,...第2种方案业务接入更加简单,跟iOS原生开发的SDK一样,无需KMM环境,主要问题是各个业务依赖klib的版本不一致,导致构建sdkframework多个版本,这时需要用不同分支构建不同业务的sdkframework...iosArm64() targets { configure(listOf(iosX64, iosArm64)) { binaries.withType(org.jetbrains.kotlin.gradle.plugin.mpp.Framework
所以我们为什么不只写一次业务逻辑代码,在不同的平台上共享呢? 有了这个想法之后,Jetbrains 带来了 Kotlin Multiplatform Project 。...但是,为了在 Android/iOS 上实现同样的逻辑,有时候你不得不写两份版本特定代码,例如蓝牙,Wifi 等等。为了处理这种情况,Kotlin 提供了 expect/actual 机制。...例如你可能想知道你的应用是运行在 Android 还是 iOS 设备,并且得到设备的具体型号。为了完成这个功能,你需要使用 expect/actual 关键字。...注意,如果你使用了 expect,你必须提供对应名称的 actual 实现。...否则,你会得到如下错误: ➡️ Expect/Actual 的使用 commonMain expect class Platform() { val platform: String } androidMain
: 如果在代码中出现了来自不同包的相同类名,可以使用导入别名来消除这样的歧义: import io.plaidapp.R as appR import io.plaidapp.about.R 复制代码...Kotlin 提供了 "实际声明" (actual declarations) 和 "预期声明" (expected declarations) 的机制来简化这种操作。...在公共代码中声明的接口为预期声明,使用 expect 关键字;在相应的平台代码中的扩展为实际声明,使用 actual 关键字。...如果平台代码中已经实现了公共代码中的某个接口,并且所有期望方法的签名一致时,您可以使用类型别名将实际声明的类型名称映射到期望类型上: expect annotation class Test actual...因此,您不应该依赖类型别名做编译类型检查,而应该使用一个不同的类型或者内联类。
图中 expect 表示的就是 Common Lib 中有些需要依赖平台相关特性的地方,例如刚才说到的 Date,是平台相关的特性,在跨平台的标准库当中没有提供,可是我想在跨平台代码中用它呀: inline...Jvm 版本的 Date: actual class Date { private val jvmDate = java.util.Date() actual fun getTime()...= jvmDate.time } 与 expect 相对的有 actual,这就是在 Jvm 上面实现的版本了。...Js 版本的 Date: actual class Date { private val jsDate = kotlin.js.Date() actual fun getTime() =...小结 Kotlin 本身可以编译到不同平台,所以要解决代码在不同平台的编译,要解决的就是: 平台无关的标准库 平台相关 Api 的自定义 相信通过阅读本文,大家就可以对这个概念有所了解了。 ----
Kotlin Multiplatform 中的 Expect 和 Actual,解决了调用本机平台 API 的需求 本机 API 问题是通过预期声明和实际声明的机制来解决的。...expect 关键字将声明标记为将与用actual关键字标记的代码匹配,actual关键字可能是特定于平台的。...JetBrains 建议仅对平台 API 使用 expect/actual,其他情况使用普通接口。...2022 年的一项调查显示,Kotlin Multiplatform 应用程序的代码共享率高达 63% Kotlin Multiplatform 适用于非 GUI 代码,但有一个相关项目 Compose...使用 Kotlin 而不是 Java 的另一个原因是它的语言特性,包括 lambda 表达式、扩展函数、类型推理、null 安全等等。Kotlin 没有检查异常,因为这些不会提高生产力或代码质量。
,实现这个接口的类,具有可以暂停和继续的能力,也就是resumeWith()方法。...它负责把 DispatchedContinuation 分发到不同的调度器中去执行。...而是指kotlin在支持 jvm / js/ native 三个平台上的跨平台。从它的设计上也能感受到kotlin想吊打其他语言的野心。...俗话说“javascript抢别人的活”,现在看kotlin连js的活也想抢。不知道过个十年kotlin和js有哪个还能被开发者使用。...... } 可以看到jvm包中的方法名多了 actual修饰,后面也有具体的实现createDefaultDispatcher()。
expect-actual 技术。...虽然平台不同,但是具有相同功能的函数的参数数量、类型,以及返回类型都高度统一。因此这给我们定义 common source set 中的 MMKV 类型带来了便利。...我们的实现方式有两种可选: • MMKV_KMP 声明为 class,通过 expect-actual 机制在平台相关层编写其实现。...,我们只需通过 expect-actual 机制实现即可,这些工厂函数的返回类型都指定为 MMKV_KMP,在平台 source set 中调用 Java 与 Objective-C 的对应工厂函数,得到...)以及签名。
可以通过 expected 以及 actual 声明来表达通用代码对平台特定部分的依赖关系。expected 声明指定了一个 API(类、接口、注释、顶层声明等)。...actual 声明或是 API 的平台相关实现,或是在外部库中 API 现有实现的别名引用。...下面是官方提供的相关例子: 通用模块 // expected platform-specific API: expect fun hello(world: String): String fun greet...关键字lateinit lateinit 和lazy一样,是 Kotlin中的两种不同的延迟初始化技术。...弃用:vararg单个命名参数 为了与注释中的数组文字保持一致,在命名形式(foo(items = i))中传递可变参数的单个项目已被弃用。请使用具有相应数组工厂功能的扩展运算符。
KMM是什么 KMM的全称是Kotlin Multiplatform Mobile,与之对应的是KMP—Kotlin Multiplatform Project,其实就是一个是Kotlin移动端跨平台,...我始终觉得有一个尴尬的问题就是,要说Compose Multiplatform与KMM不是一个东西吧,他们确实不是一个东西,毕竟版本的更新、维护者都不同。...expect与actual 我们要依赖Kotlin中的expect与actual关键字。expect是我们期望实现的方式,actual是实现方式,有点类似接口与实现类。...首先我们要在commonMain中使用expect定义这个接口 然后我们在shares模块下的androidMain、iOSMain目录下各自实现打开蓝牙的方法。...好在Kotlin在1.8.20版本中推出了Kotlin/Wasm,最新的Compose for Web 是基于Kotlin/Wasm的,当前处于试验阶段。
,支持使用 Kotlin 编写响应式 Web UI。...它可简化并加快 Android 上的界面开发。使用更少的代码、强大的工具和直观的 Kotlin API,快速让应用生动而精彩。...Text(greeting) } } Result: Servus 使用 Compose for Web 构建用户界面 借助 Compose for Web,开发者通过使用 Kotlin...可组合的 DOM API 通过 DOM 元素和 HTML 标签表达设计和布局 使用类型安全的 HTML DSL 构建 UI 表示形式 通过使用类型安全的 CSS DSL 创建样式表来完全控制应用程序的外观...} } } 具有 Web 支持的多平台小部件 通过利用 Kotlin 的 Expect-actual 机制来提供特定于平台的实现,从而使用和构建可在 Android、桌面和 Web 上运行的
,支持使用 Kotlin 编写响应式 Web UI。...它可简化并加快 Android 上的界面开发。使用更少的代码、强大的工具和直观的 Kotlin API,快速让应用生动而精彩。...Text(greeting) } } Result: Servus 94_2.png 使用 Compose for Web 构建用户界面 借助 Compose for Web,开发者通过使用 Kotlin...可组合的 DOM API 通过 DOM 元素和 HTML 标签表达设计和布局 使用类型安全的 HTML DSL 构建 UI 表示形式 通过使用类型安全的 CSS DSL 创建样式表来完全控制应用程序的外观...} } } 94_3.png 具有 Web 支持的多平台小部件 通过利用 Kotlin 的 Expect-actual 机制来提供特定于平台的实现,从而使用和构建可在 Android、桌面和
JetBrains 提出了不同于 RN 与 Flutter 的跨端解决方案,即使用不同的编译器编译同一份代码生成各端的不同产物来达到跨平台的目的,这就是 Kotlin Multiplatform。...Kotlin 依据其运行的平台不同拥有不同的名字,例如编译为 class 字节码运行于 JVM 及 Android 平台的称为 Kotlin/JVM,编译为原生二进制码无虚拟机环境直接运行于操作系统上的则称为...我们先在 common source set 中定义抽象的 MMKV 类型: expect class MMKV 当然它是待实现的,我们希望它在 Android 平台直接表示 Java 的 MMKV...接着使用一些顶层函数来桥接 MMKV 的静态函数,用扩展函数来桥接 MMKV 在不同平台的成员函数,Android 如下: internal actual fun defaultMMKV(): MMKV...参考链接 【1】Kotlin 多平台官方介绍 https://kotlinlang.org/docs/mpp-intro.html 【2】MMKV https://github.com/Tencent/
,支持使用 Kotlin 编写响应式 Web UI。...它可简化并加快 Android 上的界面开发。使用更少的代码、强大的工具和直观的 Kotlin API,快速让应用生动而精彩。...赶紧检查下代码里有没有脏话... 2、使用 Compose for Web 构建用户界面 借助 Compose for Web,开发者通过使用 Kotlin 并应用 Jetpack Compose 的概念和...可组合的 DOM API 通过 DOM 元素和 HTML 标签表达设计和布局 使用类型安全的 HTML DSL 构建 UI 表示形式 通过使用类型安全的 CSS DSL 创建样式表来完全控制应用程序的外观...具有 Web 支持的多平台小部件 通过利用 Kotlin 的 Expect-actual 机制来提供特定于平台的实现,从而使用和构建可在 Android、桌面和 Web 上运行的 Compose 小部件
,支持使用 Kotlin 编写响应式 Web UI。...它可简化并加快 Android 上的界面开发。使用更少的代码、强大的工具和直观的 Kotlin API,快速让应用生动而精彩。 UI 代码和预览如下图所示: ?...赶紧检查下代码里有没有脏话... 2、使用 Compose for Web 构建用户界面 借助 Compose for Web,开发者通过使用 Kotlin 并应用 Jetpack Compose 的概念和...可组合的 DOM API 通过 DOM 元素和 HTML 标签表达设计和布局 使用类型安全的 HTML DSL 构建 UI 表示形式 通过使用类型安全的 CSS DSL 创建样式表来完全控制应用程序的外观...具有 Web 支持的多平台小部件 通过利用 Kotlin 的 Expect-actual 机制来提供特定于平台的实现,从而使用和构建可在 Android、桌面和 Web 上运行的 Compose 小部件
,支持使用 Kotlin 编写响应式 Web UI。...它可简化并加快 Android 上的界面开发。使用更少的代码、强大的工具和直观的 Kotlin API,快速让应用生动而精彩。...Text(greeting) } } Result: Servus 使用 Compose for Web 构建用户界面 借助 Compose for Web,开发者通过使用 Kotlin...可组合的 DOM API 通过 DOM 元素和 HTML 标签表达设计和布局 使用类型安全的 HTML DSL 构建 UI 表示形式 通过使用类型安全的 CSS DSL 创建样式表来完全控制应用程序的外观...} } } 94_3.png 具有 Web 支持的多平台小部件 通过利用 Kotlin 的 Expect-actual 机制来提供特定于平台的实现,从而使用和构建可在 Android、桌面和
,支持使用 Kotlin 编写响应式 Web UI。...它可简化并加快 Android 上的界面开发。使用更少的代码、强大的工具和直观的 Kotlin API,快速让应用生动而精彩。 UI 代码和预览如下图所示: ?...2 使用 Compose for Web 构建用户界面 借助 Compose for Web,开发者通过使用 Kotlin 并应用 Jetpack Compose 的概念和 API 为 Web 构建响应式用户界面...可组合的 DOM API 通过 DOM 元素和 HTML 标签表达设计和布局 使用类型安全的 HTML DSL 构建 UI 表示形式 通过使用类型安全的 CSS DSL 创建样式表来完全控制应用程序的外观...具有 Web 支持的多平台小部件 通过利用 Kotlin 的 Expect-actual 机制来提供特定于平台的实现,从而使用和构建可在 Android、桌面和 Web 上运行的 Compose 小部件
,支持使用 Kotlin 编写响应式 Web UI。...它可简化并加快 Android 上的界面开发。使用更少的代码、强大的工具和直观的 Kotlin API,快速让应用生动而精彩。 UI 代码和预览如下图所示: ?...使用 Compose for Web 构建用户界面 借助 Compose for Web,开发者通过使用 Kotlin 并应用 Jetpack Compose 的概念和 API 为 Web 构建响应式用户界面...可组合的 DOM API 通过 DOM 元素和 HTML 标签表达设计和布局 使用类型安全的 HTML DSL 构建 UI 表示形式 通过使用类型安全的 CSS DSL 创建样式表来完全控制应用程序的外观...具有 Web 支持的多平台小部件 通过利用 Kotlin 的 Expect-actual 机制来提供特定于平台的实现,从而使用和构建可在 Android、桌面和 Web 上运行的 Compose 小部件
领取专属 10元无门槛券
手把手带您无忧上云