余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

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

xiyangw 2022-12-03 11:52 22 浏览 0 评论

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

相关推荐

【反诈征文展播】(二)谨防网络诈骗(反网络诈骗文章)
【反诈征文展播】(二)谨防网络诈骗(反网络诈骗文章)

谨防网络诈骗甘州区青年东街小学四4班家长:王飞随着计算机技术、互联网的发展及信息技术的进步,网上银行、网络炒股、网络购物等网络商业活动的日渐兴起,在人们沉...

2023-03-21 19:46 xiyangw

四月前端面试题总结:前端面试总结(下篇)(2021前端的面试题及答案)
四月前端面试题总结:前端面试总结(下篇)(2021前端的面试题及答案)

接着昨天的前端面试题总结写的哈,有在找工作的伙伴,建议仔细阅读!10.什么是原型链原型:每个javascript创建的时候都会关联另一个对象,这个对象就是原型,...

2023-03-21 19:46 xiyangw

客户端JavaScript的限制(javascript客户端脚本编程)

处于安全的考虑,客户端的js运行会受到种种限制,下面就让我们来了解一下。浏览器的限制浏览器限制了JavaScript任务的运行时间。这种限制是有必要的,它确保某些恶意代码不能通过永不停止的密集操作锁住...

前端面试干货:四月份前端面试题总指南(下篇)
前端面试干货:四月份前端面试题总指南(下篇)

接着昨天的前端面试题总结写的哈,有在找工作的伙伴,建议仔细阅读!10.什么是原型链原型:每个javascript创建的时候都会关联另一个对象,这个对象就是原型,...

2023-03-21 19:46 xiyangw

网页出现禁止复制黏贴的内容如何破解(网页禁止粘贴破解)
网页出现禁止复制黏贴的内容如何破解(网页禁止粘贴破解)

我们查询网页的时候,想复制网页上的部分内容,结果出现请先登陆或者是连提示也没有,有的复制加了个小尾巴,如何操作,且听早早道来主要破解思路是:禁用js+取消use...

2023-03-21 19:45 xiyangw

SEO优化中 JavaScript错误可能会影响页面收录
SEO优化中 JavaScript错误可能会影响页面收录

Google的搜索开发倡导者马丁·斯普利特(MartinSplitt)表示:“通常情况下,页面不收录一些问题出在其他方面,我首先会指责JavaScript。”...

2023-03-21 19:45 xiyangw

网络安全知识——深入剖析恶意攻击性网页(恶意网站的危害是什么)

最近越来越多的个人网站都采用了恶意攻击性网页,从开始的只是修改IE首页地址,强迫大家一打开IE就进入他的主页来提高主页访问量,愈演愈烈,到最后发展到锁定IE部分功能阻止用户恢复,甚至有的网页浏览后造成...

这样设置,百度文库就可以复制了(百度文库怎么可以复制)
这样设置,百度文库就可以复制了(百度文库怎么可以复制)

百度文库中word复制不了文字,右键复制,提示是VIP特权。按下面方面破解。一、页面空白处右键,选择“审查元素”,或直接按F12;二、按F1出现设置;或点击下面...

2023-03-21 19:45 xiyangw

JavaScript容错的优雅地降级功能(js降序排序)
JavaScript容错的优雅地降级功能(js降序排序)

探测到错误时禁用组件是一回事。处理出错的组件并将其从UI中优雅地移除是另一回事。即使我们努力保持组件之间松耦合,但涉及到DOM时,这项工作会变得很有难度。例如,...

2023-03-21 19:44 xiyangw

国家电网照片修改系统常见问题(国家电网的照片怎样上传)
国家电网照片修改系统常见问题(国家电网的照片怎样上传)

照片处理http://jl.zggqzp.com/zt/2020dw_zpxg/?a=d&b=zhgq1.上传按钮点击不了请尝试刷新一个网页过几秒等网页...

2023-03-21 19:44 xiyangw

浏览器如何禁用JavaScript(浏览器如何禁用缓存)
浏览器如何禁用JavaScript(浏览器如何禁用缓存)

为了方便对一些网站功能进行测试,需要浏览器禁用JavaScript,那这个怎么才能做到呢?1.通过F12进入开发者工具,使用快捷键CTRL+SHIFT+P(Wi...

2023-03-21 19:44 xiyangw

Twitter 推文删除后,将从外部网站消失:显示一个空白框
Twitter 推文删除后,将从外部网站消失:显示一个空白框

据TheVerge报道,Twitter现在对被删除的推文嵌入第三方网站时的显示方式做了一个较小但重要的改变。至少从三月底开始,当嵌入的推文被删除时,社交...

2023-03-21 19:43 xiyangw

客户端相关文件读取漏洞(文件读取漏洞利用)

客户端也存在文件读取漏洞,大多是基于XSS漏洞读取本地文件。1.浏览器/FlashXSS一般来说,很多浏览器会禁止JavaScript代码读取本地文件的相关操作,如请求一个远程网站,如果它的Java...

iOS 16锁定lockdown模式对浏览器的影响 - sevarg

Apple正在预览一项突破性的安全功能,为可能面临来自开发国家资助的雇佣间谍软件的私营公司的高度针对性网络攻击风险的用户提供专门的额外保护。启用iOS16的锁定Lockdown模式后对浏览器的功能...

如何安全的存储用户的密码(存储用户密码信息的文件是?)
如何安全的存储用户的密码(存储用户密码信息的文件是?)

大多数的web开发者都会遇到设计用户账号系统的需求。账号系统最重要的一个方面就是如何保护用户的密码。一些大公司的用户数据库泄露事件也时有发生,所以我们必须采取一...

2023-03-21 19:43 xiyangw

取消回复欢迎 发表评论: