Kotlin的基础语法
变量的定义
var age: Int = 18
val name: String = "Amy"
var age = 18
val name = "Amy"
可以看出来几乎和swift 一模一样,var 变量 val 对应于let,可以自己推导出变量的类型
Kotlin可空类型 vs Swift Optional
Kotlin写法
var name: String = "Amy" // 非空,必须有值
var name2: String? = "Amy" // 可空,相当于Optional<String>
name = name2 // ❌ 编译报错,不能把String?赋给String
name = name2!! // ✅ 强制解包,可能crash(相当于Swift的!)
name2 = name // ✅ String可以赋给String?
//空合并运算符
val result = name2 ?: "default"
//可选绑定
name2?.let { x ->
println(x)//只有name2 非空的时候执行
}
//guard let (提前返回)
fun printName(name2:String?){
val x = name2 ?: return // 为空直接return,相当于guard let
println(x) // 这里的x 是非空的String
Swift的写法
var name: String = "Zhang Tao"
var name2: String? = "Zhang Tao"
name = name2 // ❌ 编译报错
name = name2! // ✅ 强制解包
name2 = name // ✅
// 可选绑定
if let x = name2 {
print(x)
}
// guard let
func printName(_ name2: String?) {
guard let x = name2 else { return }
print(x)
}
Swift的Optional是枚举类型包装,Kotlin的可空类型是编译器层面的类型系统检查,本质实现不同,但开发体验几乎一致
函数的定义
fun echo(name: String): String? = name
Swift用func声明函数、->表示返回值,Kotlin用fun 声明、 :表示返回值,
字符串插值Swift 是\(name),Kotlin 是 $name
Kotlin 一键单例
Kotlin用object关键字,语言层面直接支持单例,省去样板代码
object UserManager{
fun logout(){}
}
UserManager.logout()
swift 需要手动实现单例模板:
class UserManager {
static let shared = UserManager()
private init(){}
}
UserManager.shared.logout()
类类型表示
Kotlin 用 UserManager::class
Java 用 UserManager::class.java
Swift 用 UserManager.self
static/class func 去哪了?
Swift用static或class func 定义类方法,Kotlin没有这两个关键字,用companion object 替代:
Kotlin
class User{
companion object {
//单表达式函数,函数体只有一行时可以省略大括号和return(Swift单表达式只能省略return)
fun create(): User = User()
fun desc(): String = "User"
}
var name = "Alfred"
}
User.create()
User.desc()
User().name
Swift
class User {
static func create() -> User { User() }
class func desc() -> String { "User" }
var name = "Amy"
}
User.create()
User.desc()
User().name