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://www.cnblogs.com/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