一位国外的程序员认为 Swift 的语法与 Kotlin 相似,并整理了一些 Swift 和 Kotlin 的对比,下面是一些例子,大家不妨也看看。
BASICS
Hello World
Swift
print("Hello, world!")Kotlin
println("Hello, world!")变量和常量
Swift
var myVariable = 42myVariable = 50let myConstant = 42
Kotlin
var myVariable = 42myVariable = 50val myConstant = 42
显式类型
Swift
let explicitDouble: Double = 70
Kotlin
val explicitDouble: Double = 70.0
强制类型转换
Swift
let label = "The width is "let width = 94let widthLabel = label + String(width)
Kotlin
val label = "The width is "val width = 94val widthLabel = label + width
字符串插值
Swift
let apples = 3let oranges = 5let fruitSummary = "I have \(apples + oranges) " + "pieces of fruit."
Kotlin
val apples = 3val oranges = 5val fruitSummary = "I have ${apples + oranges} " +
"pieces of fruit."范围操作符
Swift
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.countfor 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 JackKotlin
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 25Kotlin
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 25BASICS
数组
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<String>()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 argumentsarea(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 = 7var shapeDescription = shape.simpleDescription()
Kotlin
var shape = Shape() shape.numberOfSides = 7var 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 = 0var songCount = 0for item in library {
if item is Movie {
movieCount += 1 } else if item is Song {
songCount += 1 }
}Kotlin
var movieCount = 0var songCount = 0for (item in library) {
if (item is Movie) {
++movieCount
} else if (item is Song) {
++songCount
}
}模式匹配
Swift
let nb = 42switch 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 = 42when (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 * 1000val Double.m: Double get() = thisval Double.cm: Double get() = this / 100val Double.mm: Double get() = this / 1000val Double.ft: Double get() = this / 3.28084val 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"
随时随地看视频