您现在的位置是:首页 > 文章详情

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

日期:2017-06-01点击:301

一位国外的程序员认为 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://www.oschina.net]

原文链接:https://yq.aliyun.com/articles/115143
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章