Swift 与 Kotlin 的简单对比
2017-05-24 23:13
260 查看
一位国外的程序员认为 Swift 的语法与 Kotlin 相似,并整理了一些 Swift 和 Kotlin 的对比,下面是一些例子,大家不妨也看看。
Swift
Kotlin
变量和常量
Swift
Kotlin
显式类型
Swift
Kotlin
强制类型转换
Swift
Kotlin
字符串插值
Swift
Kotlin
范围操作符
Swift
Kotlin
包罗广泛的范围操作符(Inclusive Range Operator)
Swift
Kotlin
Swift
Kotlin
映射
Swift
Kotlin
空集合
Swift
Kotlin
Swift
Kotlin
元组返回
Swift
Kotlin
参数的变量数目(Variable Number Of Arguments)
Swift
Kotlin
函数类型
Swift
Kotlin
映射
Swift
Kotlin
排序
Swift
Kotlin
命名参数
Swift
Kotlin
Swift
Kotlin
用法
Swift
Kotlin
子类
Swift
Kotlin
类型检查
Swift
Kotlin
模式匹配
Swift
Kotlin
类型向下转换
Swift
Kotlin
协议
Swift
Kotlin
扩展
Swift
Kotlin
BASICS
Hello WorldSwift
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" 原文地址:https://www.oschina.net/news/85013/swift-is-like-kotlin?from=groupmessage&isappinstalled=1
相关文章推荐
- Swift 就像 Kotlin?看看 Swift 与 Kotlin 的简单对比
- kotlin的一些特性介绍和与java C#的简单对比
- Swift与Objective C的简单对比
- 使用Kotlin实现Android简单Demo,对比JAVA实现分析具体语法不同之处(一)
- 使用Kotlin实现Android简单Demo,对比JAVA实现分析具体语法不同之处(二)
- 补充策略模式结构图以及简单工厂模式结构图对比
- TOSCA自动测试工具跟QTP 和 Selenium的简单对比
- 如何通过Swift Package Manager来构建一个简单的开发环境
- 学习swift 《kvc和kvo的简单使用》
- [原]JS ajax类的三种封装形式及简单对比
- kotlin方言(对比其它语言)
- Andrid学习一----recovery.img与boot.img简单对比分析
- Kotlin最简单的入门教程——关键字,操作符,异常,空指针
- CE3和UE3在多线程渲染方面的简单对比
- swift 代理模式 简单例子
- 一种UCB1算法的简单实现及效果对比
- 梯度下降法和牛顿法的简单对比
- Swift-Realm简单使用,代替Sqlite、Crodata的强大数据库
- Impala、Hive性能简单对比测试
- Java和JavaScript简单对比