Swift 与 Kotlin 的简单对比

一位国外的程序员认为 Swift 的语法与 Kotlin 相似,并整理了一些 Swift 和 Kotlin 的对比,下面是一些例子,大家不妨也看看。

BASICS

Hello World

Swift

print(“Hello, world!”)

Kotlin

println(“Hello, world!”)

变量和常量

Swift

var myVariable = 42
myVariable = 50
let myConstant = 42

Kotlin

var myVariable = 42
myVariable = 50
val myConstant = 42

显式类型

Swift

let explicitDouble: Double = 70

Kotlin

val explicitDouble: Double = 70.0

强制类型转换

Swift

let label = "The width is "
let width = 94
let widthLabel = label + String(width)

Kotlin

val label = "The width is "
val width = 94
val widthLabel = label + width

字符串插值

Swift

let apples = 3
let oranges = 5
let fruitSummary = "I have (apples + oranges) " +
“pieces of fruit.”

Kotlin

val apples = 3
val oranges = 5
val fruitSummary = "I have ${apples + oranges} " +
“pieces of fruit.”

范围操作符

Swift

let names = [“Anna”, “Alex”, “Brian”, “Jack”]
let count = names.count
for i in 0…<count {
print(“Person (i + 1) is called (names[i])”)
}
// Person 1 is called Anna
// Person 2 is called Alex
// Person 3 is called Brian
// Person 4 is called Jack

Kotlin

val names = arrayOf(“Anna”, “Alex”, “Brian”, “Jack”)
val count = names.count()
for (i in 0…count - 1) {
println(“Person ${i + 1} is called ${names[i]}”)
}
// Person 1 is called Anna
// Person 2 is called Alex
// Person 3 is called Brian
// Person 4 is called Jack

包罗广泛的范围操作符(Inclusive Range Operator)

Swift

for index in 1…5 {
print("(index) times 5 is (index * 5)")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25

Kotlin

for (index in 1…5) {
println("$index times 5 is ${index * 5}")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25

BASICS
数组

Swift

var shoppingList = [“catfish”, “water”,
“tulips”, “blue paint”]
shoppingList[1] = “bottle of water”

Kotlin

val shoppingList = arrayOf(“catfish”, “water”,
“tulips”, “blue paint”)
shoppingList[1] = “bottle of water”

映射

Swift

var occupations = [
“Malcolm”: “Captain”,
“Kaylee”: “Mechanic”,
]
occupations[“Jayne”] = “Public Relations”

Kotlin

val occupations = mutableMapOf(
“Malcolm” to “Captain”,
“Kaylee” to “Mechanic”
)
occupations[“Jayne”] = “Public Relations”

空集合

Swift

let emptyArray = String
let emptyDictionary = String: Float

Kotlin

val emptyArray = arrayOf()
val emptyMap = mapOf<String, Float>()

FUNCTIONS
函数

Swift

func greet(_ name: String,_ day: String) -> String {
return “Hello (name), today is (day).”
}
greet(“Bob”, “Tuesday”)

Kotlin

fun greet(name: String, day: String): String {
return “Hello $name, today is $day.”
}
greet(“Bob”, “Tuesday”)

元组返回

Swift

func getGasPrices() -> (Double, Double, Double) {
return (3.59, 3.69, 3.79)
}

Kotlin

data class GasPrices(val a: Double, val b: Double,
val c: Double)
fun getGasPrices() = GasPrices(3.59, 3.69, 3.79)

参数的变量数目(Variable Number Of Arguments)

Swift

func sumOf(_ numbers: Int…) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sumOf(42, 597, 12)

Kotlin

fun sumOf(vararg numbers: Int): Int {
var sum = 0
for (number in numbers) {
sum += number
}
return sum
}
sumOf(42, 597, 12)

// sumOf() can also be written in a shorter way:
fun sumOf(vararg numbers: Int) = numbers.sum()

函数类型

Swift

func makeIncrementer() -> (Int -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
let increment = makeIncrementer()
increment(7)

Kotlin

fun makeIncrementer(): (Int) -> Int {
val addOne = fun(number: Int): Int {
return 1 + number
}
return addOne
}
val increment = makeIncrementer()
increment(7)

// makeIncrementer can also be written in a shorter way:
fun makeIncrementer() = fun(number: Int) = 1 + number

映射

Swift

let numbers = [20, 19, 7, 12]
numbers.map { 3 * $0 }

Kotlin

val numbers = listOf(20, 19, 7, 12)
numbers.map { 3 * it }

排序

Swift

var mutableArray = [1, 5, 3, 12, 2]
mutableArray.sort()

Kotlin

listOf(1, 5, 3, 12, 2).sorted()

命名参数

Swift

func area(width: Int, height: Int) -> Int {
return width * height
}
area(width: 2, height: 3)

Kotlin

fun area(width: Int, height: Int) = width * height
area(width = 2, height = 3)

// This is also possible with named arguments
area(2, height = 2)
area(height = 3, width = 2)

CLASSES
声明

Swift

class Shape {
var numberOfSides = 0
func simpleDescription() -> String {
return “A shape with (numberOfSides) sides.”
}
}

Kotlin

class Shape {
var numberOfSides = 0
fun simpleDescription() =
“A shape with $numberOfSides sides.”
}

用法

Swift

var shape = Shape()
shape.numberOfSides = 7
var shapeDescription = shape.simpleDescription()

Kotlin

var shape = Shape()
shape.numberOfSides = 7
var shapeDescription = shape.simpleDescription()

子类

Swift

class NamedShape {
var numberOfSides: Int = 0
let name: String

init(name: String) {
    self.name = name
}

func simpleDescription() -> String {
    return "A shape with \(numberOfSides) sides."
}

}

class Square: NamedShape {
var sideLength: Double

init(sideLength: Double, name: String) {
    self.sideLength = sideLength
    super.init(name: name)
    self.numberOfSides = 4
}

func area() -> Double {
    return sideLength * sideLength
}

override func simpleDescription() -> String {
    return "A square with sides of length " +
       sideLength + "."
}

}

let test = Square(sideLength: 5.2, name: “square”)
test.area()
test.simpleDescription()

Kotlin

open class NamedShape(val name: String) {
var numberOfSides = 0

open fun simpleDescription() =
    "A shape with $numberOfSides sides."

}

class Square(var sideLength: BigDecimal, name: String) :
NamedShape(name) {
init {
numberOfSides = 4
}

fun area() = sideLength.pow(2)

override fun simpleDescription() =
    "A square with sides of length $sideLength."

}

val test = Square(BigDecimal(“5.2”), “square”)
test.area()
test.simpleDescription()

类型检查

Swift

var movieCount = 0
var songCount = 0

for item in library {
if item is Movie {
movieCount += 1
} else if item is Song {
songCount += 1
}
}

Kotlin

var movieCount = 0
var songCount = 0

for (item in library) {
if (item is Movie) {
++movieCount
} else if (item is Song) {
++songCount
}
}

模式匹配

Swift

let nb = 42
switch nb {
case 0…7, 8, 9: print(“single digit”)
case 10: print(“double digits”)
case 11…99: print(“double digits”)
case 100…999: print(“triple digits”)
default: print(“four or more digits”)
}

Kotlin

val nb = 42
when (nb) {
in 0…7, 8, 9 -> println(“single digit”)
10 -> println(“double digits”)
in 11…99 -> println(“double digits”)
in 100…999 -> println(“triple digits”)
else -> println(“four or more digits”)
}

类型向下转换

Swift

for current in someObjects {
if let movie = current as? Movie {
print("Movie: ‘(movie.name)’, " +
“dir. (movie.director)”)
}
}

Kotlin

for (current in someObjects) {
if (current is Movie) {
println("Movie: ‘${current.name}’, " +
“dir. ${current.director}”)
}
}

协议

Swift

protocol Nameable {
func name() -> String
}

func f<T: Nameable>(x: T) {
print("Name is " + x.name())
}

Kotlin

interface Nameable {
fun name(): String
}

fun f<T: Nameable>(x: T) {
println("Name is " + x.name())
}

扩展

Swift

extension Double {
var km: Double { return self * 1_000.0 }
var m: Double { return self }
var cm: Double { return self / 100.0 }
var mm: Double { return self / 1_000.0 }
var ft: Double { return self / 3.28084 }
}
let oneInch = 25.4.mm
print(“One inch is (oneInch) meters”)
// prints “One inch is 0.0254 meters”
let threeFeet = 3.ft
print(“Three feet is (threeFeet) meters”)
// prints “Three feet is 0.914399970739201 meters”

Kotlin

val Double.km: Double get() = this * 1000
val Double.m: Double get() = this
val Double.cm: Double get() = this / 100
val Double.mm: Double get() = this / 1000
val Double.ft: Double get() = this / 3.28084

val oneInch = 25.4.mm
println(“One inch is $oneInch meters”)
// prints “One inch is 0.0254 meters”
val threeFeet = 3.0.ft
println(“Three feet is $threeFeet meters”)
// prints “Three feet is 0.914399970739201 meters”

原文地址:https://www.oschina.net/news/85013/swift-is-like-kotlin?from=groupmessage&isappinstalled=1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值