根据我的研究,
Kotlin 有两种类型的字符串文字:-
可能包含转义字符的转义字符串。
val s = "Hello ,World\n" +
"from escaped string\n"+
"kotlin"
Run Code Online (Sandbox Code Playgroud)
原始字符串由三重引号 (""") 分隔,不包含转义,可以包含换行符和任何其他字符:
val m = """Hello, World
|from raw string
|kotlin """.trimMargin()
Run Code Online (Sandbox Code Playgroud)
这些字符串可以在多行中使用,无需连接每一行,也无需转义。
我们使用原始字符串只是为了简单和容易实现,还是在任何情况下都提供更好的性能?
这些是我们应该考虑使用原始字符串的其他用例吗?
最近,我读到了有关运算符执行的智能强制转换的信息is,以及有关用于显式强制转换的as或更好的运算符的信息。as?
kotlin 文档将其用法差异分类如下:-
请注意,当编译器无法保证变量在检查和使用之间不会更改时,智能转换不起作用。更具体地说,智能转换根据以下规则适用:
val 局部变量 - 始终除了局部委托属性;
val 属性 - 如果属性是私有的或内部的,或者检查是在声明该属性的同一模块中执行的。智能转换不适用于开放属性或具有自定义 getter 的属性;
var 局部变量 -如果该变量在检查和使用之间未修改,则未在修改它的 lambda 中捕获,并且不是本地委托属性;
var 属性 - 从不(因为该变量可以随时被其他代码修改)。
请注意,当编译器无法保证变量在检查和使用之间不会更改时,智能转换不起作用。
上面写的有点令人困惑,因为var变量可以在初始化后更改,而且我找不到可以清楚说明该语句的实际含义的示例。
无论如何,任何人都可以更容易地更好地理解这一见解吗?
运营商是否is提供了一些优于as运营商的优化优势(如果有的话)?
fun tap(view: View) {
val img = view
}
Run Code Online (Sandbox Code Playgroud)
我希望这个变量 img 是一个图像视图,但不知道如何将视图转换为图像视图。