苹果Swift语言简要介绍
Swift是苹果发布的新的编程语言,Swift从现有的各种语言汲取了精华,其getter / setter 语法是来自于C#,命名的变量类型类似 Pascal-derived语言,字符串插值类似许多脚本语言,如 \(foo) 类似 Groovy的 ${foo},一个类型的问号后缀表示其可以为空,类似Ceylon,变化范围操作符来自Ruby或 Groovy。
Swift的语言定位在性能和产品性方面都取得更好的平衡,据苹果宣传,Swift在性能方面处于与Object-C和Java可相竞争的地位,远高于动态脚本语言如Ruby Python Groovy Javascript Lua等;而在产品性易使用方面,其定位高于Javascript,类似Groovy。
Swift有如下特点:
函数是闭包
函数或方法都是闭包,如下:
可见Swift具有函数编程语言风格。
嵌套类型
Swift也同时支持类型,实现面向对象的编程方式:
一个类里面可以嵌套其他类,这是其一个特点。注意到第9行enum语法,使用了类型推导。
变量和常量
苹果鼓励你缺省使用常量,如同Scala语言一样,Swift内建了类型var 来创建一个可变的实例,这和Scala使用val表示不变量有点不同,Swift使用let来创建一个不变量。
类Groovy
Groovy粉丝会认为Swift是受Groovy鼓舞的。好事者进行了比较:
// Swift
var shoppingList = ["catfish", "water", "tulips", "blue paint"]
shoppingList[1] = "bottle of water"
var occupations = [
"Malcolm": "Captain",
"Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"
var emptyMap = [:]
var emptyList = []
// Groovy
def shoppingList = ["catfish", "water", "tulips", "blue paint"]
shoppingList[1] = "bottle of water"
def occupations = [
"Malcolm": "Captain",
"Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"
def emptyMap = [:]
def emptyList = []
两者不同是 "def" 和 "var". Swift还使用了"let"定义常量,相当于Groovy的"final"
Swift闭包也采取的类似 Groovy语法的大括号分隔符,使用"in"替代Groovy中用来分离方法体和参数的箭头。
// swift
numbers.map({
(number: Int) -> Int in
let result = 3 * number
return result
})
// groovy
numbers.collect { int number ->
def result = 3 * numbers
return result
}
命名参数上两者比较相近:
// swift
var triangleAndSquare = TriangleAndSquare(size: 10, name: "another test shape")
// groovy
def triangleAndSquare = new TriangleAndSquare(size: 10, name: "another test shape")
@lazy懒赋值也比较相似:
// swift
class DataManager {
@lazy var importer = DataImporter()
}
// groovy
class DataManager {
@Lazy importer = new DataImporter()
}
Swift与函数语言Scala也非常相似,可见这篇文章:Swift vs. Scala