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之间有很多改变,那么将来肯定会有更多地特性出现。我们团队将会持续关注所有的更新,深入挖掘令人兴奋的改变,所以请密切留意教程,书籍和视频。

swift 2特性记录的更多相关文章

  1. iOS开发——新特性篇&swift新特性(__nullable和__nonnull)

    swift新特性(__nullable和__nonnull) 最近在看老师写代码的时候经常遇到两个陌生的关键字,但是当我在我的电脑上敲得时候就是敲不出,后来才知道这是为了swift与OC混编的时候产生 ...

  2. php不同版本特性记录

    最近在用php开发时项目中遇到了版本问题,特此记录下php不同版本的一些特性记录,以备忘. 一:php5.3中的新特性 1)开始支持命名空间(Namespace) 2)支持延迟静态绑定(Late St ...

  3. swift的特性:扩展、协议、泛型

    swift的特性:扩展.协议.泛型 扩展与继承:对象的生长方式: 协议:支持 协议->类型.类型<-协议 的双向抽象: 泛型:

  4. swift新特性(__nullable和__nonnull

    http://www.mamicode.com/info-detail-923593.html 最近在看老师写代码的时候经常遇到两个陌生的关键字,但是当我在我的电脑上敲得时候就是敲不出,后来才知道这是 ...

  5. swift 声明特性 类型特性

    原文地址:http://www.cocoachina.com/newbie/basic/2014/0612/8801.html 特性提供了关于声明和类型的很多其它信息.在Swift中有两类特性,用于修 ...

  6. swift语言特性

    最近苹果推出了他们新的开发语言,swift,他们自己的说法是,swift语言将会更快捷,更安全等等.但是具体的性能,还需要在后面的实践过程中去观察,但是就目前来说swift语言除了将大部分21世纪静态 ...

  7. iOS 之 Swift 新特性

    支持所有C和OC的基本类型 提供了Array 和Dictionary两个强劲的集合类型 元组 可选类型 闭包 脚本特性 类型安全

  8. C#新特性记录

    C#6.0新特性笔记 Getter专属赋值 可以在构造函数中,给只有get的属性赋初始值. class Point { public int x { get; } public Point() { x ...

  9. swift 手机号码正则表达式 记录一下

    func isTelNumber(num:NSString)->Bool { var mobile = "^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$&qu ...

随机推荐

  1. Telnet用不了怎么办

    配置了几天的Oracle数据库,忙坏我了,遇到无数问题,其中一个就是Telnet无法使用: 经过检查发现,其实是这个软件没有安装,取程序里面找到之后,加装这个组件,完成安装. 但是还是不能用,发现服务 ...

  2. 项目一:项目第二天 Jquery ztree使用展示菜单数据 2、 基础设置需求分析 3、 搭建项目框架环境--ssh(复习) 4、 SpringData-JPA持久层入门案例(重点) 5、 Easyui menubutton菜单按钮使用 6、 Easyui messager消息框使用

    1. Jquery ztree使用展示菜单数据 2. 基础设置需求分析 3. 搭建项目框架环境--ssh(复习) 4. SpringData-JPA持久层入门案例(重点) 5. Easyui menu ...

  3. 在linux系统个人目录下安装新版python

    一.下载所需的python版本文件 在linux个人目录下 下载https://www.python.org/ftp/python/3.5.4/Python-3.5.4.tar.xz 解压tar.xz ...

  4. webAPI中使用log4net进行日志记录

    1.从nuget下载log4net 2.根据需求配置web.config,或者另外写一个log4net.config文件,各个节点的意义详细查询api <section name="l ...

  5. Struts2学习第三课 Struts2详解

    接着上次的课程 这次我们看struts.xml 修改如下:这里是加上命名空间,默认的是不加,我们手动加上时就要在访问时加上命名空间. <?xml version="1.0" ...

  6. 11. CTF综合靶机渗透(四)

    运行环境 Virtualbox (二选一) Vnware Workstation player 通关提示 Enumeration is key Try Harder Look in front of ...

  7. 实用掌中宝--HTML&CSS常用标签速查手册 PDF扫描版

    实用掌中宝--HTML&CSS常用标签速查手册 内容推荐: 本书第一篇以语法和实例相结合的形式,详细讲解了HTML语言中各个元素及其属性的作用.语法和显示效果:第二篇从CSS基本概念开始,分别 ...

  8. OpenStack基础知识-virtualenv工具详解

    1.virtualenv介绍 virtualenv通过创建一个单独的虚拟化python运行环境,将我们所需的依赖安装进去,不同项目之间相互不干扰,从而解决不同的项目之间依赖不同,造成的冲突问题 2.安 ...

  9. Educational Codeforces Round 52E(构造,快速幂)

    #include <bits/stdc++.h>using namespace std;const int mod=998244353;long long b[200007];long l ...

  10. [题解](树形dp/记忆化搜索)luogu_P1040_加分二叉树

    树形dp/记忆化搜索 首先可以看出树形dp,因为第一个问题并不需要知道子树的样子, 然而第二个输出前序遍历,必须知道每个子树的根节点,需要在树形dp过程中记录,递归输出 那么如何求最大加分树——根据中 ...