android+swift教程,写给 Swift 开发者的 Kotlin 教程

无论你是想学习 Android 开发知识的 iOS 程序员,还是你是仍在使用 Java 的安卓程序员,又或者你是已在用 Kotlin 的 Android 程序员却想多了解一点 Swift,这篇文章都适合你。

这是两种流行的现代移动开发语言的对比,不过我只谈论语言,而不会去涉及实现的应用开发,所以你看到的这些内容也适用于移动开发之外的领域。

两者的相似之处

首先,两种语言拥有很多相同之外。它们都是强类型且都支持类型推导,所以当编译器可以从赋值推导时你无须指定变量类型:

var text: String = "lorem ipsum" // 这是一个 string 型变量

var otherText = "sit dolor amet" // 这是也是一个 string 型

它们都支持 immutable不变量,这对于线程安全的编码来说是个很强大的概念:

let numberFour = 4 // Swift 里的 Immutable 整型

var numberFive = 5 // Kotlin 里的 Immutable 整型

它们也都通过可选类型支持空引用安全(null safety):

// 当 someObjectOrNull 不为空时 someMethod 被调用

someObjectOrNull?.someMethod()

两者都支持尾闭包。

Swift:

// 定义函数

func doSomething(andCall callback: () -> Void) { … }

// 调用函数

doSomething {

// 回调函数

}

Kotlin 也有同样的特性:

// 定义函数

fun doSomething(callback: () -> Unit) { … }

// 调用函数

doSomething {

// 回调函数

}

所有这些特性都允许用这两种语言写出更简洁和可阅读的代码。

现在,来看看一些不同之处。

if let 与 ?.let

Swift 里一个众所周知且很常用的模式是 if let 模式,当你处理可选类型值时,通过它可以仅当值被设置过的情况下执行逻辑:

let someOptional: String? = …

if let text = someOptional {

// 此处 text 是一个非可选类型的 string

}

在 Kotlin 里你可以使用定义于所有类型的标准函数 let 做同样的事情:

val someOptional: String? = …

someOptional?.let { text ->

// 此处 text 是一个非可选类型的 string

}

不过 Kotlin 里没有像 Swift 的 guard let 这种用法。作为回报,Kotlin 的标准函数(如 let, apply, with, run , also, …)提供了远超 if let 功能的用法,但这些用法已经超出文本的讨论范围了。

字面量与辅助函数

和许多语言一样,Swift 知道类似数组和字典这类复杂类型的字面量注解:

// [String] 数组

let list = ["lorem", "ipsum"]

// [Int: String] 字典

let dict = [10: "lorem", 20: "ipsum"]

不幸的是,Kotlin 不支持这种字面量注解——至少目前没有。替代的方案,是退一步使用辅助方法:

// Array 类型的数据

val list = arrayOf("lorem", "ipsum")

// Map 类型的 Map

val map = mapOf(10 to "lorem", 20 to "ipsum")

针对不同的情况存在几个辅助函数:arrayOf, mutableArrayOf, listOf, mutableListOf, setOf, mutableSetOf, mapOf, mutableMapOf。

函数命名及命名参数

Swift 似乎从 Objective-C 继承了函数声明方式。可能是苹果希望他们现有的 API 能在两种语言里以相似的方式工作。无论如何,我个人喜欢 Swift 的函数声明方式,因为它可以带来更可阅读的代码:

// 定义函数

func processText(_ text: String, withOptions options: [Int]) { … }

// 调用函数

processText("lorem ipsum", withOptions: [1, 2])

相较之下,Kotlin 使用更经典的 C 风格方案:

// 定义函数

fun processText(text: String, options: Set) { … }

// 调用函数

processText("lorem ipsum", setOf(1, 2))

第二种谈何很接近 Swift 的描述方式。

it 关键字

Kotlin 里的 it 关键字和 Swift 高阶函数中的 $0 类似。让我们以一个简单的 map 调用作为示例:

[1, 2, 3].map { $0 * } // 结果:[2, 4, 6]

Kotlin 中相同的用法:

listOf(1, 2, 3).map { it * 2 } // 结果:listOf(2, 4, 6)

除此之外,许多 Kotlin 标准函数都可以使用 it。让我们来回顾一下前面的 if let 示例:

val someOptional: String? = …

someOptional?.let { text ->

// 这里的 text 是非可选类型

}

如果在 let 块中没有命名参数 text,则可以通过 it 访问 someOptional 的未装箱内容:

val someOptional: String? = …

someOptional?.let {

// 这里,it 是非可选类型的 string

}

小结

Swift 和 Kotlin 确实有很多相似的概念,但他们在很多情况下仍然采取了不同的方案。希望我能帮助你弥补这两种非凡美妙语言之间的一些鸿沟。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值