Swift


苹果新编程语言Swift,从开始研发到最终发布仅用了不足4年时间。该语言背后的创造者为苹果开发者工具部门总监克里斯·拉特纳(Chris Lattner),根据其在博客上的表述,Swift的底层架构大多由其一人开发完成,而开发期间,仅少数内部人士对此项目知晓。

Swift语言开发工作是从2010年7月开始,但直到2013年才获得了苹果开发者工具部门的重视。拉特纳表示,大多数早期架构的开发是由其个人独自完成的,但到了2011年末,一些非常优秀的工程师开始为该项目提供贡献,这才使得Swift获得了部门的重视。

与其他编程语言一样,Swift受益于其他语言那些来之不易的开发经验。Xcode Playgrounds功能是拉特纳的最爱,也是Swift为苹果开发工具带来的最大创新。该功能提供了不可思议的互动效果,能让Swift代码在编写过程中实时的编译和显示。

拉特纳强调,Playgrounds的功能很大程度是受到了布雷特·维克多(Bret Victor)理念、透写光台以及其他一些互动系统的启发。而将编程变得更加平民化和有趣,拉特纳认为这有助于苹果吸引到下一代的程序员们,甚至让大学重新制定计算机科学专业的课程内容。

Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化


全局函数都是闭包,特点是有函数名但没有捕获任何值。
嵌套函数都是闭包,特点是有函数名,并且可以在它封闭的函数中捕获值。

{ (parameters) ->return typein

    statements

}

闭包的函数体部分由关键字 in引入。


let names = ["Chris","Alex","Ewa","Barry","Daniella"]

func backwards(s1:String, s2:String) ->Bool {

   return s1 > s2

}

var reversed =sort(names,backwards)

println(names)


reversed =sort(names, { (s1:String, s2:String) -> Boolin

   return s1 > s2

    })

println(names)


reversed =sort(names, { s1, s2inreturn s1 > s2 } )

println(names)


reversed =sort(names, { s1, s2in s1 > s2 } )

println(names)
















下标语法,通过使用subscript关键定义

subscript(index:Int) -> Int {

    get {

        // return an appropriate subscript value here

    }

    set(newValue){

        // perform a suitable setting action here

    }

}



subscript(index:Int) -> Int {

    // return an appropriate subscript value here

}


struct Matrix

{

   let rows: Int, columns:Int

   var grid: Double[]

   init(rows: Int, columns:Int) {

       self.rows = rows

       self.columns = columns

       grid = Array(count: rows * columns, repeatedValue:0.0)

    }

   func indexIsValidForRow(row: Int, column: Int) -> Bool {

       return row >= 0 && row <rows && column >= 0 && column < columns

    }

   subscript(row: Int, column:Int) -> Double {

       get {

           assert(indexIsValidForRow(row, column: column),"Index out of range")

           return grid[(row *columns) + column]

        }

       set {

           assert(indexIsValidForRow(row, column: column),"Index out of range")

           grid[(row * columns) + column] = newValue

        }

    }

}

var matrix =Matrix(rows: 2, columns:2)

matrix[0,1] = 1.5

matrix[1,0] = 3.2

println(matrix.grid)




重写一个由继承而来的方法需要在方法定义前标注override关键词。

还可以在类关键词class前使用@final标记一整个类为final(@final class)。任何子类尝试继承这个父类时都会在编译时报错。你可以通过标记final关键词来禁止重写一个类的方法,属性或者下标。在定义的关键词前面标注@final属性即可。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值