苹果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具有函数编程语言风格。

嵌套类型

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

Swift中文简明教程

从OOP和FP看苹果Swift语言与Scala比较

英文Swift在线文档