发布于 2017-05-20 01:24:54 | 203 次阅读 | 评论: 0 | 来源: 网友投递
Swift编程语言
SWIFT,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。
一位国外的程序员认为 Swift 的语法与 Kotlin 相似,并整理了一些 Swift 和 Kotlin 的对比,下面是一些例子,大家不妨也看看。
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
数组
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>()
函数
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)
声明
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/