首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

干货 | 携程机票 App KMM 跨端生产实践

而这两者目前为数不多可用 Kotlin 平台库。...也就是说,一个函数(无论 Kotlin 函数还是 Objective-C 函数)它接收参数为 NSObject 类型,那么 Kotlin 工程调用这个函数,传入任何 Kotlin 对象(除非显式声明该...这个问题带来可能影响有一些 Objective-C API 需要使用 class 对象来生成对应实例。目前来说这个问题带来影响请详见 2.2 小节,不过被我们用其他设计方案规避。...Ktor 与 kotlinx 库等官方库目前 Kotlin平台中坚力量,Ktor 目前可以平台环境提供稳定 HTTP 请求、数据序列/反序列功能,相当强大 Kotlin 平台网络库...suspend 函数等等,Kotlin 与 iOS 平台“原住民”们友好关系也逐渐提升,而开发者们期待Swift 互操作能力提升也官方计划列表(参考链接 8)。

3.2K10

KMM 求生日记二:KotlinNative 被踩

然后我 Android 主工程编写这些桥接接口实现,以及对 KMM 业务逻辑调用。...Java 所有类根级父类 Object,但是 Kotlin/JVM ,这两者统一,也就是说如果一段 Java 代码接收参数类型 Object,那我们仍然可以将任意一个 Kotlin 对象作为参数传入...> class 对象,通过类名或该类对象都可以直接获取。 Kotlin/JVM Kotlin 有自己 KClass 类型,它与 Java Class<?...但奇怪 Kotlin 工程如果直接声明一个类继承自 NSObject,可以用 class() 函数来获取自身 class 对象,但普通 Kotlin 类则没有这个函数。...以上说明 Kotlin/Native 开发还有一条不成文规定:除非你 object 作用内仅存在常量、纯函数,否则一定要加上 @ThreadLocal 注解。

2.4K10
您找到你想要的搜索结果了吗?
是的
没有找到

开源 | 携程机票跨端 Kotlin DSL 数据库框架 SQLlin

但我们在后续实现中会尽量还原它设计。 总的来说,用户可以创建 Table 实例用来表示数据库表,在所有的 SQL 语句中,Table 实例都是主语,Table 同时约束序列与反序列对象类型。...最后,SELECT 语句返回了一个 SelectStatement 类型对象整个 database {...} 作用完结之后可以用它来提取查询结果。...3.3.3 使用 Kotlin Symbol Processor 实现表与列元素生成 3.3.1 小节基本设计,Table 实例通过构造函数创建,每次创建时用户都需要手动传入数据库真实表名作为参数...而 KSP 处理则是中间表示码 IR,相当于 Kotlin 编译到各平台产物之前对进行了处理,因此可以用于跨平台场景,并且 IR Kotlin 代码直接编译产物,无须概念转换,这使得 KSP... Kotlin Multiplatform 开发,最常见 JSON 和 ProtoBuf 序列与反序列官方 kotlinx.serialization。

1.6K40

开源|携程机票 App KMM 跨端 KV 存储库 MMKV-Kotlin

4.1 初始函数 2.2 小节演示了 MMKV-Kotlin 初始,因此初始函数 Android、iOS 两个 source set 中分别定义与实现。...最终我们选择了方案二,原因在于:平台相关 source set 编写具体实现 class 需要实例化时需要同时构建 Java/Objective-C  MMKV 实例,且最好方式在其构造函数作为参数传入...其次, MMKV 原本设计,MMKV 实例本身也不是通过构造函数创建,而是通过一系列工厂方法创建,因此我们没有必要在 common 层定义构造函数。...但在 MMKV-Kotlin  initialize 函数分不同平台实现,因此我们采取将 API 测试核心代码放在 common, Android/iOS source set 初始 MMKV...        assertEquals(value2, true)     }          // Other type test...... } setUp、testDown 分别负责 MMKV_KMP 对象实例及测试结束清理工作

1.6K20

说说最近官方公布 Kotlin 动态

接下来工作重点我们之前文章当中就曾经谈到,其实就是应用场景挖掘,开发体验优化和提升,以及平台完善和生态建设。...再往前时候,Kotlin Team 还会维护一下 Kotlin GitHub 上开 Keep 仓库,不过这个仓库现在已经一副年久失修感觉了。...KMM 插件 KMM 算是 Kotlin Team 为平台这个重磅特性挖掘一个重要应用场景。 ?...最近随着 Kotlin 1.4 发布推出 KMM 插件也支持了 Android Studio 上直接运行 iOS 应用,启动 iOS 模拟器,甚至单步调试运行在 iOS 上 Kotlin Native...Kotlin Native 可用框架目前仍然比较少,如果想要编写 Kotlin 平台代码,也需要我们引入框架支持 Kotlin 平台,例如序列框架可选目前主要就是官方 kotlinx-serialization

1.2K30

Swift vs. Kotlin 漫谈系列之类与继承

Kotlin 君和 Swift一个团队一起开发已经很久了,由于平台差异性,他们经常会进行一些技术上交流(PK),《Kotlin vs. Swift漫谈》系列就是他们互相切磋是的语录。...伴生对象成员可通过只使用类名作为限定符来调用,伴生对象成员看起来像 Java 静态成员,在运行时他们仍然真实对象实例成员。... Kotlin ,如果一个类从它直接超类继承相同成员多个实现(由于接口函数可以有实现),它必须覆盖这个成员并提供自己实现。...,所以初始可以随意访问主构造函数参数。...这是因为 var 本质上声明了一个 setter 方法。 此外,我们还可以主构造函数参数也可以同样实现属性覆盖。

3.6K40

谷歌社区说|聊聊Compose跨平台KMM

KMM更像是营销术语,我们不用纠结Mobile这个词,你要知道,下文我们所说KMM就是指Kotlin平台不仅限于移动端就行了。 KMM可以简化平台应用程序开发。...比如这张图中数据层、网层等都可以使用KMM来完成公共业务逻辑。...这里添加网络请求库Ktor和序列依赖,因为Kotlin平台嘛,KtorKotlin推出网络请求库,所以肯定使用Ktor最佳选择。...项目配置好之后,我们接着刚刚查询每日一问功能来实现,当然配置时候肯定踩了很多坑,这些我都记录在我博客中了。 实现双端网络数据显示 iOSApp.swift代码这个样子。...好在Kotlin1.8.20版本推出了Kotlin/Wasm,最新Compose for Web 基于Kotlin/Wasm,当前处于试验阶段。

55010

KMM平台开发入门,看这一篇就够了~

KMM却与之相反,接下来让我们来一起了解一下吧~ 什么KMM KMMKotlin Multiplatform Mobile 一个 SDK,旨在简化跨平台移动应用程序开发。...上面官方描述说了这么,简单来说就是KMM注重业务逻辑跨平台,和Flutter、Compose完全相反。即使如此,在这个都想着跨别人年代,KMM也称自己并没有说过不会做UI平台......源集一个 Gradle 概念,用于逻辑上组合在一起多个文件,其中每个组都有自己依赖项。 Kotlin Multiplatform ,共享模块不同源集可以针对不同平台。 ...支持多个目标的平台库,可以公共源集 commonMain 中使用。例如 Koin、Apollo 和 Okio。 android和iOSMain, 这些来自相关生态系统常规库。...首先我们将用到依赖添加进来,这里主要有Kotlin协程、序列(Ktor使用要求)、和Ktor,Ktor一个可以用于HTTP请求网络框架,如果读者不熟悉的话可自行查看。代码如下所示。

4.3K20

Kotlin 发布 10 周年,专访 JetBrains Roman Elizarov

Kotlin 一种跨平台静态类型语言,具有现代简洁语法,旨在克服Java开发停滞时期 Java 缺陷。Kotlin 关键特性包括 null 安全性、协程、数据类型、扩展函数等。...Kotlin 目标从代码完全删除任何仪式,包括内存管理,并让应用程序开发人员专注于他们代码实质——他们正在编写业务逻辑,即使这意味着牺牲一些运行时性能。 Swift 则不同。...此外,作为 Swift 创造者,苹果似乎对 Swift 在其它平台未来并不感兴趣,或者在外部观察者看来如此。...对于 Kotlin 来说,这意味着苹果平台上与 Swift 激烈竞争开发者们意愿,但几乎不担心 Kotlin 瞄准所有其它平台。...InfoQ: 你希望看到 Kotlin 未来 10 年内如何发展? Elizarov: 我们未来 10 年主要重点平台生态系统。

61210

为什么建议大家加快拥抱Kotlin,说点不一样

Kotlin 协程:协程轻量级,可以同一个线程创建成千上万个协程,极大地减少了内存消耗。协程内存占用远小于传统线程。3....Kotlin 协程:协程通过结构并发(Structured Concurrency)机制,将协程生命周期与作用绑定,异常处理更加直观和集中。...而Kotlin,个人认为和iOS最新开发语言swift就有着很多相似之处。1. 语法简洁和现代两种语言语法都非常简洁,目的减少样板代码(boilerplate),提高代码可读性。...而如果我们既会Android开发,又会iOS开发,势必会增加我们竞争力,甚至让我们未来一种选择。...表达式和函数Kotlin支持高阶函数和Lambda表达式,这使得函数式编程Kotlin变得非常自然。开发者可以编写更简洁、更表达性代码,同时利用函数式编程优势。

5600

iOS 面试策略之语言工具-Swift

正所谓工欲善其事必先利器,说就是考察开发者对自己手头工具和语言特性掌握。 [1240] iOS 开发,语言选择最初一步。现在苹果主推编程语言 Swift。...Struct 相比 class 使用上有什么优势? 2. Swift 面向对象还是函数编程语言? 关键词:#面向对象 #函数式编程 Swift 既是面向对象,又是函数编程语言。...类似问题: 为什么说 Swift 函数编程语言? 3. Swift ,什么可选型(optional) ?...Private 最低访问权限。它对象只能在定义作用内及其对应扩展内使用。离开了这个对象,即使同一个文件对象,也无法访问。...当 title 发生改变前,willSet 对应作用将被执行,新 newValue;当 title 发生改变之后,didSet 对应作用将被执行,原来值为 oldValue。

1.3K10

Kotlin Property Delegate 与 Swift Property Wrapper

Kotlin 当中变量类型分为可空和不可空,定义时必须明确类型,例如下面例子 image: [Kotlin] class MainActivity: Activity { lateinit...说来也有趣,设计文档还特意 "diss" 了 Kotlin 属性代理语法设计:单独为了属性代理搞了一个 by 关键字实在有些重,在其他场景下也不太好复用,于是 Swift 属性包装器采用了与...稍微提一句, Swift ,struct 值类型,class 引用类型,对于属性包装器来讲,二者都是可以,用哪个取决于具体需求。...这个 projectedValue 实际上也是一个属性包装器,它类型 Binding,Binding 这个属性包装器作用比较直接,类似于我们前面介绍 Kotlin 属性代理时提到...更何况 getDelegate 这个反射方法目前只能在 JVM 上使用,无法实现平台

5.2K20

【移动开发趋势】2022 年移动应用程序开发主要趋势

一般移动市场,关于元宇宙和移动应用程序区块链集成兴起引起了很多关注。同样, iOS 和 Android 平台上,增强现实、聊天机器人和语音识别方面都有令人兴奋发展。...Swift Swift 一种强大 iOS 编程语言。Apple 引入了一种新、现代、更清晰 API,用于 Swift 应用程序植入并发。 它们可以称为“异步/等待 API”。...安卓 超宽带 (UWB) API、Jetpack Compose、Kotlin Multiplatform Mobile (KMM) 和聊天机器人 Android 应用程序开发主要亮点。...Kotlin 平台移动 (KMM) Kotlin Multiplatform Mobile (KMM) 技术允许您编写一次代码,然后 iOS 或 Android 等多个平台上使用此代码。...这个综合库为开发人员提供了创建令人兴奋和创新应用程序和功能所需所有工具。 平台功能 2022 年 React Native 可能增长另一个领域平台功能。

2.8K20

Kotlin极简教程 》正式预售: 欢迎阅读,大家多多指教!!! Kotlin Minimalist Tutorial official pre-sale: Welcome to read,

Kotlin充分借鉴并汲取了Java、Scala、Groovy、C#、Gosu、JavaScript、Swift门杰出语言优秀特性,语法简单优雅、表现力丰富、抽象扩展方便、代码可重用性好,同时也支持面向对象函数式编程范式编程...那时,我也对Scala、Groovy、Clojure、Haskell等技术很感兴趣,伴随着兴趣学习过程,我无意中看到了上面那段Kotlin代码,第一眼看到这么优雅函数式编程风格,尤其compose...我们知道,Java一门非常优秀面向对象语言。但是函数式编程方面,与其他函数语言相比,还是显得有些笨重与生涩,并且其内在体现出来思想,依旧面向对象思想。   ...第8章介绍Kotlin函数式编程相关内容,其中重点介绍了Kotlin高阶函数、Lambda表达式、闭包等核心语法,并给出相应实例说明。...我还要感谢工作学习认识所有朋友和同事们,能够认识你们并跟你们一起学习、共事,荣幸!

77540

写给Android工程师协程指南

内存泄漏更少:使用结构并发机制一个作用内执行多项操作。 内置取消支持:取消操作会自动在运行整个协程层次结构内传播。...Jetpack 集成:许多 Jetpack 库都包含提供全面协程支持扩展。某些库还提供自己协程作用,可供您用于结构并发。...上述步骤如下: 当左侧 main() 方法开始执行时,因为示例中使用 runBlocking(),需要传递一个函数式接口对象,通常我们会以 lambda表达式 形式去实例这个函数对象,然后在其中写入我们业务代码...我们知道, kotlin ,lambda 匿名内部类一种实例方式(简化),所以这里只是给 runBlocking() 函数传递了所需要方法参数。...注意:这里我们锁 this@coroutineScope ,而不是 this ,前者代表着我们循环外作用对象,而直接使用this则代表了当前协程作用对象,并不存在竞争关系。

1.3K40

iOS面试题-Swift

,可以继承和重写,不允许在其他模块访问 fileprivate: 修饰对象只允许在当前文件访问; private: 最低级别访问权限,只允许定义作用内访问关键字:Strong,Weak,Unowned...这个语法好处在于通过写普通表达式代替显式闭包而使你省略包围函数形式参数括号 非逃逸闭包:闭包调用发生在函数结束前,闭包调用在函数作用内 逃逸闭包:闭包有可能在函数结束后调用,闭包调用逃离了函数作用...Swift中跟实例对象相关属性可以分为2大类 存储属性(Stored Property) 类似于成员变量这个概念 存储实例对象内存 结构体、类可以定义存储属性 枚举不可以定义存储属性 计算属性(...使用lazy可以定义一个延迟存储属性,第一次用到属性时候才会进行初始(类似OC懒加载) 不占用实例对象内存 枚举、结构体、类都可以定义计算属性 lazy属性必须var,不能let let...严格来说,属性可以分为 实例属性(Instance Property): 只能通过实例对象去访问 存储实例属性(Stored Instance Property):存储实例对象内存,每个实例对象都有

3.5K40

【玩转腾讯云】2020 年编程语言盘点展望:Java 老兵不死,Kotlin 蓄势待发

对于 Matthes 而言,Python 令人兴奋一个方面来自一个社区各种有趣且关键项目已经诞生了,而社区已经如此有意识地建立了这么长时间。”...,尤其当它们超出最初目标时。...序列支持意味着将 JSON 数据转换为 Kotlin 对象更加容易,反之亦然。 希望看到 Kotlin 继续保持惊人增长 —— 并且不仅仅是 Android 。...JetBrains 开发人员倡导团队负责人 Hadi Hariri 指出 Kotlin / Everywhere 成功,使得人们可以 Android,Google Cloud Platform 和平台开发中学习...Go 开发人员兼作家 Jon Bodner 解释说: 关于 Go 最常见抱怨之一错误处理太冗长。因此, 6 月初,Go 核心开发人员建议添加一个名为 try 新内置函数

1.1K50

2022年最新Python大数据之Python基础【九】面向对象与继承

8、继承 9、子类重写父类方法 1、实例属性添加和获取 外部添加和获取实例属性 添加:对象名.属性名 = 值 获取:对象名.属性名 创建对象后,我们对其中一个对象添加实例属性,其他对象不发生变化...可以 p1.name = 'Rose' print(p1.name) # Rose # 同一个对象内部和外部添加实例属性 本质上一样 # 外部使用对象名,其实使用对象引用地址,...,就需要添加属性,这个时候,没有办法获取对象名称. 2、__init__()方法 __init__()方法在对象创建完成后,初始对象时,自动调用 init方法添加属性,由于每个对象都会执行该方法...p4 p4 = p3 print(p3) func() # 上述代码可以推断,函数执行完成后,出了作用,会将函数内所有的临时变量释放掉,除非其被外部变量引用 print('程序结束...') # 切断引用或释放对象几个场景 # 1.出了函数作用会自动释放函数局部变量 # 2.程序结束会自动释放所有的变量 # 3.使用del操作可以提前释放变量 6、面向对象案例 ''' 需求:

28810

14.闭包

闭包能够捕获和存储定义在其上下文中任何常量和变量,即闭合并包裹那些常量和变量,因此被称为“闭包” 闭包符合如下三种形式一种: 全局函数一个有名字但不会捕获任何值闭包 内嵌函数一个有名字且能从上层函数捕获值闭包...(函数嵌套函数知识点) 闭包表达式一个轻量级语法,可以捕获上下文中常量或变量值没有名字闭包 闭包和函数一样也是引用类型 简单案例 案例一 let demo= { print("Swift 闭包实例...$0,$1,$2来顺序调用闭包参数 闭包表达式中使用参数名称缩写,可以闭包参数列表中省略对定义 参数类型可以通过函数类型进行推断 return 关键字可以省略 in 关键字也可以被省略 //...、变量,并在自己作用内使用 Swift最简单闭包形式嵌套函数,也就是定义在其他函数函数体内函数,嵌套函数可以捕获其外部函数所有的参数以及定义常量和变量。...unowned 表示:即使它原来引用对象被释放了,仍然会保持对被已经释放了对象一个 "无效" 引用,它不能 Optional 值,也不会被指向 nil tools.loadData {[unowned

75610
领券