...字符串

isEmpty(): 其源码是判断其length是等于0,若等于0则返回true,反之返回false。不能直接用于可空的字符串

isNotEmpty(): 其源码是判断其length是否大于0,若大于0则返回true,反之返回false。不能直接用于可空的字符串

isNullOrEmpty(): 其源码是判断该字符串是否为null或者其length是否等于0。

isBlank(): 其源码是判断其length是否等于0,或者判断其包含的空格数是否等于当前的length。不能直接用于可空的字符串

isNotBlank(): 其源码是对isBlank()函数取反。不能直接用于可空的字符串

isNotOrBlank(): 其源码判断该字符串是否为null。或者调用isBlank()函数

方法null""" ""Hello"
isNullOrEmpty()✅ true✅ true❌ false❌ false
isNullOrBlank()✅ true✅ true✅ true❌ false

1.创建集合

  1.       可变集合
  2. java中map

         

.......数组使用

 2.循环

 

3.方法

 

 2.方法参数

 

 

 

 4.lamlba表达式

 

 

5.条件控制

1.单个条件

2.多个条件 when 相当于 java switch  case 

6.泛型

 7.let扩展

 8.run扩展

 9.apply扩展

 

10.LiveData 

 实际会用到 Event 的场景:

  1. 全局弹窗:只需要在一个页面显示一次

  2. 页面跳转:只需要一个页面处理导航

  3. 操作确认:只需要一个地方处理确认逻辑

  4. 错误提示:全局错误只需要显示一次

class Event<T>(private val content: T) {
    private var hasBeenHandled = false
    
    fun getContentIfNotHandled(): T? {
        return if (hasBeenHandled) {
            null  // 🎯 已经被兑换过了
        } else {
            hasBeenHandled = true  // 🎯 标记为已兑换
            content
        }
    }
}



// 如果多个地方观察同一个事件:
object StatusManager {
    private val _refreshEvent = MutableLiveData<Event<Unit>>()
    val refreshEvent: LiveData<Event<Unit>> = _refreshEvent
}

// 页面A观察:
StatusManager.refreshEvent.observe(this) { event ->
    event?.getContentIfNotHandled()?.let { 
        refreshHeader()  // 只想刷新头部
    }
}

// 页面B观察:
StatusManager.refreshEvent.observe(this) { event ->
    event?.getContentIfNotHandled()?.let { 
        refreshContent()  // 只想刷新内容
    }
}

// ❌ 问题:页面A消费了事件,页面B就收不到了!

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐