zoukankan      html  css  js  c++  java
  • swift 2特性记录

    swift 团队一直在优化,让大家准备在秋天的时候,迁移到swift2做准备。

    一、错误处理

    异常处理,不是NSError对象和双指针。

    可以使用 throws   来指定方法来抛出一个错误。

    调用do  try catch 多个关键字来捕获和处理错误。

    NSError对象的引用,inout 

    方法会赋值给错误变量,传入一个nil到这里完全忽略这个错误,或者传入  NSError但从不检查它。

    enum  DrinkError:ErrorType

    {

    case NoBeerRemainingError

    }

    func drinkWithError()throws

    {

    if beer.isAvailable()

    {

    // party!

    }else{

    throw DrinikError.NoBeerRemainingError

    }

    }

    func tryToDrink()

    {

    do{

    try drinkWithError()

    }

    catch{

    print("could not drink beer!:[")

    return

    }

    }

    1、创建一个继承ErrorType的enum

    2、使用throws关键词,标志任何函数可以抛出一个错误。

    3、抛出一个错误,将会在section4中被捕获。

    4、在do块中包含任何可以抛出一个错误的代码,而不是其他语言类似的try快中,然后你添加一个try关键字到函数被调用的前面,这个函数能够抛出一个错误。

    绑定

    在swift 1.2 失去了金字塔的厄运和能够在一行代码测试多个绑定的optionals;

    if let pants = pants,frog = frog{

    // good stuff here!

    }

    检查一些没有值的optionals   早点退出,这是swift 2提供的guard语句。

    guard let pants = pants,frog = frog else{

    // sorry,no frog pants here

    return

    }

    使用guard意味着你可以执行optional binding ,如果条件失败就提供一个代码块在else运行,你可以继续执行,optiional frog 和 pants在作用域内被unwrap

    使用guard指定某种你希望得到状态而不是检查错误情况之后,使代码更加简洁。

    协议扩展

    面向协议的编程语言

    在swift1,协议就像接口一样可以指定一些属性和方法,类,结构体,枚举会遵循它。

    在swift2,你可以扩展协议给属性和方法添加默认实现,你之前已经可以在类和结构体添加新的方法到string 或 array

    你可以添加这些到协议,让你更加广泛应用。

    extension CustomStringConvertible{

    var shoutDescription:String{

    return "(self.description.uppercaseString)!!!"

    }

    }

    let greetings = ["Hello","Hi","Well"]

    // prints Hello,Hi,Yo yo yo

    print("(greetings.description)")

    // prints HELLO,HI,YO YO YO

    print("(greetings.shoutyDescription)")

    协议被命名为CustomStringConvertible 大多数的Foundation对象都遵循Printable协议,有了协议扩展,可以用自定义功能来扩展系统。

    相比向很多类,结构体和枚举添加少量的自定义代码,你可以编写一个通用实现,应用到不同的数据类型。

    用过map    filter 的,可以认为以方法的方式比全局函数来使用它们更好。

    已经有一些新的方法添加到集合类型。

    map,filter,indexOf

    et numbers = [1,5,6,10,16,42,45]

    // swift 1

    find(filter(map(numbers,{$0*2}),{$0%3 == 0}),90)

    // swift 2

    numbers.map{$0*2}.filter{$0%3 == 0}.indexOf(90) //return 2

    • Objective-C 泛型 – Apple已经开始标注所有的Objective-C代码以便Swift类型能够获取正确类型的optional。使用Objective-C泛型也能正常工作,这样给Swift开发者更好的类型提示。如果你希望出现一些UITouch对象或字符串数组,那就会出现你想要的而不是一些AnyObjects。
    • 重命名 语法 – println已经离开我们一年了;现在它是普通旧的print,现在它有第二个参数的默认值设置为true来决定是否换行。do关键字主要用来错误处理,do-while循环现在是使用repeat-while。类似地,有很多协议名都改变了,例如:Printable改为CustomStringConvertible。
    • Migrator – 有很多小的语法改变,你怎样使得你代码变得最新?Swift 1-to-2 migrator会将代码变成最新的标准和改变语法。这个migrator智能到能够更新你的代码使用新的错误处理,和更新块注释到新的格式风格!
    • 开源! – 对码农有一个重大消息就是在秋天发布Swift 2的时候,Swift将会开源!这意味着不仅可以使用它来iOS开发,更重要的是学习它的源代码。不仅如此,这将是很好的机会来深入源代码,甚至为项目贡献代码,然后在swift编译器提交历史上留下你的名字。
    • 文章引用自如下地址:O(∩_∩)O谢谢

    http://ios.jobbole.com/82099/?from=groupmessage&isappinstalled=1

    这只是所有发布特性中的一些简单示例;想了解更多,请查看WWDC session videos和已更新的Swift Programming Language book

    如果还有一些人记得在Swift第一个beta版和发布的1.0之间有很多改变,那么将来肯定会有更多地特性出现。我们团队将会持续关注所有的更新,深入挖掘令人兴奋的改变,所以请密切留意教程,书籍和视频。

  • 相关阅读:
    c# udp局域网通信
    wpf 空白汉字占位符
    直角三角形知道变长求夹角
    windowsphone 的IsolatedStorageSettings存储类型
    WPFUIElement的Background的问题
    oracle外表
    oracle安装
    数据库ddl,dml,dcl
    OLTP与OLAP的介绍
    四种XML解析方式详解
  • 原文地址:https://www.cnblogs.com/heri/p/4598292.html
Copyright © 2011-2022 走看看