专栏名称: 程序员大咖
为程序员提供最优质的博文、最精彩的讨论、最实用的开发资源;提供最新最全的编程学习资料:PHP、Objective-C、Java、Swift、C/C++函数库、.NET Framework类库、J2SE API等等。并不定期奉送各种福利。
目录
相关文章推荐
OSC开源社区  ·  Gitee AI助力医疗科研:医用耗材使用分析研究 ·  4 天前  
OSC开源社区  ·  动态链接的魔法:Linux下动态链接库机制探讨 ·  5 天前  
程序猿  ·  2023 年最受欢迎 Linux 发行版本公布 ·  1 周前  
程序猿  ·  程序员相亲指北 ·  6 天前  
51好读  ›  专栏  ›  程序员大咖

Kotlin 就像Swift ?看看 Kotlin 与 Swift 的简单对比

程序员大咖  · 公众号  · 程序员  · 2017-05-29 19:20

正文

一位国外的程序员认为 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..


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()


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(x: T) {

    print("Name is " + x.name())

}


Kotlin


interface Nameable {

    fun name(): String

}

 

fun f(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"



文章转载自 开源中国社区 [http://www.oschina.net]

原文:http://nilhcem.com/swift-is-like-kotlin/

↙点击“阅读原文”,加入 

『程序员共读』