继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Swift vs. Kotlin 之变量定义

繁华开满天机
关注TA
已关注
手记 134
粉丝 15
获赞 68

Kotlin 君和 Swift 君在一个团队一起开发已经很久了由于平台的差异性他们经常会进行一些技术上的交流PK「Kotlin vs. Swift」课程就是他们在互相切磋是的语录。

变量定义

Kotlin

你看下我们 Kotlin 定义变量太酷了比我们之前用 Java 方便太多了你们 Swift 声明变量方便吗

Swift

哦你们是怎么样的

Kotlin

我们可以直接这样定义一个变量 val b = 2 Kotlin 可以自行推断变量的类型要是 Java 就不行了必须要给每个变量定义类型。

Swift

我们这里也有类型推断的功能我们声明一个变量直接 let count = 10 就可以了和你们差不多。

Kotlin

咦你们用 let 声明变量和我们不太一样。

Swift

是的我们用 let 声明常量用 var 声明变量而且我们常量还分为储值变量和计算变量。

Kotlin

储值变量和计算变量是个什么概念我们这里没有。

Swift

像 var count = 10 这样的定义就是储值变量。像

var <variable name>: <type> {
    get {
        <statements>
    }
    set(<setter name>) {
        <statements>
    }}

这样定义为变量自定义了 getter 和 setter 方法这样每次获取变量值得时候都要经过一些的计算才能得到变量的值所以叫计算变量。

Kotlin

这个和我们定义 getter 和 setter 方法一样吗。我们完整的变量定义是这样的

var <propertyName>[: <PropertyType>] [= <property_initializer>]    [<getter>]
    [<setter>]

其中 initializer、getter 和 setter 是可以省略的但是我们没有计算变量这个概念。

Swift

恩我们定义变量的语法是差不多的除了 let 和 val 的差别。

Kotlin

哎你们的计算变量能不能给自己赋值啊如果可以赋值的话和储值变量有什么差别呢

我们 getter 和 setter 方法里面有个「支持域」的概念可以通过「支持域」直接给变量赋值所以重写 getter 和 setter 方法也只是实现不一样本身没有质的差别。

Swift

我们不行在 getter 和 setter 只能通过另外一个储值变量来保存计算的结果。

Kotlin

这点还是有差异的因为你们 getter 和 setter 不能给当前变量赋值只能进行计算的工作所以你们才有计算变量的概念。

Swift

应该是这样的。

知识点总结

Kotlin

Kotlin 定义变量的完整语法

var <propertyName>[: <PropertyType>] [= <property_initializer>]    [<getter>]
    [<setter>]

其中 initializer、getter 和 setter 是并不是必须的。在属性类型可以通过 initializer 推断的情况下属性类型也可以不声明。

val a: Int = 1  // 直接声明val b = 2   // `Int` 类型是推断出来的val c: Int  // 在没有初始化赋值的化需要定义类型

Kotlin 制定定义只读变量(read-only variable又叫常量)和变量(mutable variable)分别用 val和 var 关键字修饰。

val a: Int = 1 // 不可再次赋值var b: Int = 1 // 可再次赋值

Swift

Swift 声明常量用 let 关键字常量的值在初始化后不能被再次修改

let <constant name>[: <type>] = <expression>

Swift 声明储值变量用 var 关键字变量的值可以被任意修改

var <variable name>[: <type>] = <expression>

Swift 声明计算变量用 var 关键字同时需要指定 set 和 get 的方式仅指定 get 则为只读计算变量

var <variable name>: <type> {
    get {
        <statements>
    }
    set(<setter name>) {
        <statements>
    }}

Swift 支持类型推断在有初始值的情况下可以省去类型声明例如

let count: Int = 10 // 常量var message: String = "Hello" // 变量

可以简写为

let count = 10 // Int 类型var message = "Hello" // String 类型

原文链接http://www.apkbus.com/blog-822415-63638.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP