7. swift & kotlin 的字符串常用操作
值类型
swift
的字符串是值类型,这点和 kotlin
是不一样的,kotlin 来自于 java,所以和java 一样,是对象类型。
swift 并不是每次赋值字符串都会发生拷贝,只有新的对象发生改变的时候才会发生值拷贝
可变与不可变
swift 的 String
类型可变与不可变取决于是否可以定义的字段
let str = "test" // 不可变
var str2 = "test" // 可变
感觉很完美的继承了 swift
定义的风格
kotlin 是 Jvm 语言,所以所有的字符串都是不可变的
val str1 = "test" // str1 指向的对象不可变
var str2 = "test" // str2 指向的对象可变
因此, Swift 的 字符串可以这样操作
var str = "test"
str.append("test")
而 kotlin
是没有这样方法的,只能生成一个新的字符串赋值给新的对象
var str = "test"
str = str + "test"
当然,kotlin 直接使用 StringBuilder
就能或者一致的体验了
var str = StringBuilder("test")
str.append("test")
总得来说,swift 这个地方定义要更高一筹
字符串插值
就是在字符串里面混合写变量的能力
swift 插值使用 \(value)
这种方式
let name = "gru"
print("I am \(name)")
kotlin 插值就是使用${value}
这种方式,当只是一个变量的时候 ,{}
可以去掉
let name = "gru"
print("I am $name")
print("I am ${name}") //两种写法都可
print("I am ${name.lenght}") // 如果是表达式就一定要写大括号
groovy 和 typescript 的插值有点不一样,他们因为多了一种定义字符串的方式,所以要特殊定义字符串的方式才能插值
groovy 需要双冒号定义的字符串才能插值
def name = "gru"
print("I am $name")
print("I am ${name}") //两种写法都可
print("I am ${name.lenght}") // 如果是表达式就一定要写大括号
print('I am ${name}') // 不支持
typescript 是需要 『``』 定义的字符串才支持插值
const name = "gru"
print(`I am $name`)
迭代字符
作为现代语言两个都是支持直接迭代出来字符的
swift
var str : String = "test"
str.forEach { (Character) in
print(Character)
}
for cha in str {
print(cha)
}
kotlin
var str2 = "test"
str2.forEach {
print(it)
}
for (char in str2){
println(char)
}
但是 kotlin 可以直接访问某个位置的字符
println(str2[0])
swift 不支持的原因是,swift 支持的编码更多,没法用索引来界定每个完整字符
小结
两种语言在定义使用语言上都非常大的相似之处,但是 swift 在定义可变与不可变上更高一筹,同时支持的字符集也更多