Atitit.swift 的新特性 以及与java的比 改进方向attilax 总结

Atitit.swift 的初特点 以及与java的对立统一 改进方向attilax 总结

 

 

1. defer关键字1

2. try!形式是的“不失败”机制3

3. Guard 4

4. swift的新语法,可以充分好地支撑中DSL 6

5. Tuple 之补益  Tuple 就是休克update的list 。Tuple 比 list 操作速度快.6

6. 个体属性?很多语言都没有,都靠使用者自觉
7

7. ref7

 

1. defer关键字

当一部分语言中,有try/finally这样的操纵语句,比如Java。这种话语可以被咱在finally代码块被实施得使推行之代码,不管之前怎样的小丑跳梁。在Swift 2.0遭遇,Apple提供了defer关键字,让咱们可实现均等的功能。

及时是目前为止我最爱之 Swift 新特色(又见顶容易……)。defer语句与博外语言中之finally语句子很像,不过其不欲以及try语句绑定以共,你得拿它在其他你想放之职。如果您勾勒了defer{…},那么稀代码块被之代码就会以支配离开时函数的界定时实施,无论函数最后是运行及了最后,还是撞了return语句,或者是废除来了错误。

 

笔者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

func checkSomething() {

     

    print("CheckPoint 1")

    doSomething()

    print("CheckPoint 4")

     

}

func doSomething() {

     

    print("CheckPoint 2")

    defer {

        print("Clean up here")

    }

    print("CheckPoint 3")

     

}

checkSomething() // CheckPoint 1, CheckPoint 2, CheckPoint 3, Clean up here, CheckPoint 4

 

上述示范可以望,在打印出“CheckPoint 2”之后并不曾打印出“Clean up here”,而是“CheckPoint 3”,这就是defer的打算,它对进展了print(“Clean up here”)延迟。我们再度来拘禁一个I/O的言传身教:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

// 伪代码

func writeSomething() {

     

    let file = OpenFile()

     

    let ioStatus = fetchIOStatus()

    guard ioStatus != "error" else {

        return

    }

    file.write()

     

    closeFile(file)

     

}

 

上述示范是一个I/O操作的伪代码,如果博到之ioStatus正常,那么该方式没有问题,如果ioStatus取到之是error,那么会给guard语句抓到实践return操作,这样的话closeFile(file)就永远都不见面履了,一个重的Bug就如此产生了。下面我们看如何用defer来化解这题目:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

// 伪代码

func writeSomething() {

     

    let file = OpenFile()

    defer {

        closeFile(file)

    }

     

    let ioStatus = fetchIOStatus()

    guard ioStatus != "error" else {

        return

    }

    file.write()

     

}

 

俺们拿closeFile(file)放在defer代码块里,这样虽ioStatus为error,在尽return前会先实行defer里的代码,这样即便保证了随便生什么,最后还见面拿文件关闭。

defer又一个保险我们代码健壮性的表征,我颇喜爱。

 

2. try!形式有的“不失败”机制

除此以外一个同 Java 不同的地方是,Swift 有一个内嵌的坐try!形式有的“不失败”机制。有时一个方才见面在某种情形下调用黄,并且你明白乃所下的那种情况下其是休会见砸的。上述getBytes调用就是 Java 中之一个生好之事例:它抛出UnsupportedEncodingException但是其会担保传入“UTF-8”时得非会见丢来非常。即使你明白就不会见破产而调用时得为此try来解包。在 Swift 中,你可以采用try!来形成这些,既了解而简便。这同“!”后缀语法配合得好好,!后缀用来解包你知肯定不见面为nil的可选类型,就像面的dataUsingEncoding,类似的还有as!操作符来转换类型又你都清楚之操作必然会中标。

3. Guard

眼看看起好多矣,但是讨厌的凡,条件现在为反转为检查错误情况只要休是不易情况了。

长::减少语句,and ide检查

再也糟糕的凡如果你忘记了return语句,编译器就不管了,你的代码会开开心心地当左情况实行了事后继续执行。guard解决了装有这些题目:

编译器那里拿走了再度多的鼎力相助

let fd2 = open(…)if fd2 == -1 {

    // handle fd2 error

    close(fd1)

    return

}

// use fd1 and fd2 here

close(fd1)

 

let fd1 = open(…)

guard fd1 >= 0 else {

    // handle fd1 error

    return

}

let fd2 = open(…)

guard fd2 >= 0 else {

    // handle fd2 error

    close(fd1)

    return

}

// use fd1 and fd2 here

close(fd1)

close(fd2)

旋即虽更好了!这看起再次清了,并且由编译器那里获得了重多的辅助。但是及时并从未啊特别的哎,那干什么这是自顶欢喜的啊?那是以,跟if语句一样,guard语句也得以涵盖变量声明同时检查是不是也nil。但guard语句以不像if语句那样,声明的变量不仅仅是以guard语句范围外可用。为了帮助大家清楚,我们先来拘禁上面例子的一个可选类型版本,首先是老大金字塔:

 

4. swift的新语法,可以十分好地支撑中DSL

 有同一栽编程风格,不顶好归类。就是用次第拆分成,描述+解释。解释有形容一不行,其它地方采取描述式的讲话,而不是命令式的话语。

里面DSL,通常采取主语言的语法特性,创出一学写法,来描写有描述性的说话。这些报告句组合起来,就像相同门新语言像得。这个比难以掌握。举个例子(从ruby那里借过来的),假如计算,几时以后的秒数。C语言中,大概会刻画成

5. Tuple 底便宜  Tuple 就是匪能够update的list 。Tuple 比 list 操作速度快.

Tuple 比 list 操作速度快.如果您定义了一个价值的常量集,并且唯一要就此它们做的凡不断地遍历它,请动 tuple 代替 list.
万一对不需要修改的多少开展 “写保护”,可以使代码更安全.使用 tuple 而非是 list 如同所有一个富含的 assert 语句,说明及时无异数量是常量.如果必须使改成这些价值,则要实行 tuple 到 list 的转换.

 

6. 私房属性?很多语言都不曾,都依赖使用者自觉

7. ref

Swift 2.0新探:值得注意的初特色 – CocoaChina_深受走支付再简单.htm

Swift 中极巧的初特点 – 简书.htm