Swift 就像 Kotlin?

来源:互联网 发布:雷霆主持人音效软件 编辑:程序博客网 时间:2024/06/09 14:37
Swift 就像 Kotlin?看看 Swift 与 Kotlin 的简单对比
 局长 发布于2017年05月20日 收藏 72 评论 34
 
一位国外的程序员认为 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<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 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"


来源:http://nilhcem.com/swift-is-like-kotlin/
原创粉丝点击