Kotlin一些迷惑的语法

Kotlin 复制代码
 protected fun sendUiState(copy: S.() -> S) {
        _uiStateFlow.update { copy(uiStateFlow.value) }
    }

疑惑点:为什么传入的方法是无参数的,但是为什么调用的时候传入值?

这个 copy 函数的签名虽然看起来没有参数 ,但它的本质是一个 带接收者的函数 ,它会在一个 S 类型的对象上调用。所以:

copy(uiStateFlow.value)

不是把 uiStateFlow.value 当作参数传入 ,而是把它作为接收者对象调用这个 lambda

和如何写法是一样的,因为编译成java的时候,参数中是带有当前的对象的

Kotlin 复制代码
  protected fun sendUiState(copy: S.() -> S) {
        _uiStateFlow.update { uiStateFlow.value.copy() }
    }

Iterable

在 Kotlin 中,Iterable 是一个接口,表示可以被迭代的一组元素 。它是 Kotlin 集合体系的基础接口之一,类似于 Java 中的 Iterable<T>

✅ 基本定义:

Kotlin 复制代码
public interface Iterable<out T> {
    operator fun iterator(): Iterator<T>
}
  • T 是集合中元素的类型。

  • Iterable 的本质是:只要你能 for 遍历它,它就是 Iterable。

✅ 典型实现:

以下都是 Iterable 的子类型:

  • List

  • Set

  • Map.keys / Map.values

  • 自定义只要实现了 iterator() 方法的类

✅ 常用操作(来自扩展函数)

Kotlin 给 Iterable<T> 添加了大量实用的扩展函数,比如:

操作函数 功能
forEach {} 遍历每个元素
map {} 转换为另一个集合
filter {} 条件筛选
first {} / find {} 查找匹配项
any {} / all {} 判断是否满足条件
groupBy {} 分组
sortedBy {} 排序
toList() / toSet() 转换为 List 或 Set
复制代码
val list = (0 until  3).map {  "转成string" + it }

map的一些用法,(0 until 3)也是一个迭代器

相关推荐
一条上岸小咸鱼2 小时前
Kotlin 基本数据类型(一):Numbers
android·前端·kotlin
一条上岸小咸鱼20 小时前
Kotlin 基本数据类型(一):概述及分类
android·kotlin
Harry技术1 天前
Trae搭建Android项目:智能存储柜表结构设计以及实体生成
android·kotlin·trae
Harry技术1 天前
Trae搭建Android开发:项目中Ktor的引入与使用实践
android·kotlin·trae
前行的小黑炭2 天前
Android App:每次想写新项目锻炼一下,但苦于没有UI,那么这篇文章适合你~(适合基础小白锻炼)
android·kotlin
pengyu2 天前
【Kotlin系统化精讲:柒】 | 数据类型之复合及高级数据类型:构建复杂程序的万能钥匙
android·kotlin
xzkyd outpaper2 天前
Kotlin 协程启动方式
android·开发语言·kotlin
集成显卡2 天前
在JVM跑JavaScript脚本 | 简单 FaaS 架构设计与实现
开发语言·javascript·jvm·设计模式·kotlin·软件开发·faas
Harry技术2 天前
Trae搭建Android 开发中 MVVM 架构,使用指南:组件、步骤与最佳实践
android·kotlin·trae
q567315233 天前
使用reqwest+select实现简单网页爬虫
开发语言·爬虫·golang·kotlin