4. swift & kotlin 元组
对于 swift 来说,这就是个系统帮你快速创建的类,主要你想打包几个字段的时候非常好用,也用不着为了打包定义几个类。
定义代码如下
let error = (1,"你就是错了",1,1,22,3,3,3,3,3)
print(error)
这个元祖里面是不限制数量,同时也支持给字段命名
let error = (code: 1, message: "错了就是错了")
print(error)
//output (code: 1, message: "你的名字")
支持打包当然也直接拆包
let error = (code: 1, message: "错了就是错了")
let (code , message) = error
print("code : \(code),message \(message)")
//out code : 1, message 错了就是错了
这货在 kotlin 里面也有,但是没有那么强大
val error = Pair(1,"错了就是错了")
val error2 = Triple(1, "错了就是错了","我是第三个")
println("first : ${error.first}, second : ${error.second}")
println(error)
// output
// first : 1, second : 错了就是错了
// (1, 错了就是错了)
kotlin 是通过 Pair
和 Triple
这两个类实现的,是需要手动调用,而且目前最多支持 3 个,不支持命名字段,在我看来就是有语言加成的类,当然它也支持解包
val (code,message) = error
println("code : $code, message : $message")
但是和 swift 不同的是,kotlin 中元组的值是一定不可变的,比如 swfit 中
var error = (code: 1, message: "错了就是错了")
error.code = 1
这样是没问题的,但是 kotlin 因为本质就是个类,它的定义决定了是不能变的
public data class Pair<out A, out B>(
public val first: A,
public val second: B
)
所以这样操作是不行
var error = Pair(1, "错了就是错了")
error.first = 1
总结就是,苹果爸爸技高一筹,kotlin 因为要兼容 Java 语言做了很多妥协