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之间有很多改变,那么将来肯定会有更多地特性出现。我们团队将会持续关注所有的更新,深入挖掘令人兴奋的改变,所以请密切留意教程,书籍和视频。
swift 2特性记录的更多相关文章
- iOS开发——新特性篇&swift新特性(__nullable和__nonnull)
swift新特性(__nullable和__nonnull) 最近在看老师写代码的时候经常遇到两个陌生的关键字,但是当我在我的电脑上敲得时候就是敲不出,后来才知道这是为了swift与OC混编的时候产生 ...
- php不同版本特性记录
最近在用php开发时项目中遇到了版本问题,特此记录下php不同版本的一些特性记录,以备忘. 一:php5.3中的新特性 1)开始支持命名空间(Namespace) 2)支持延迟静态绑定(Late St ...
- swift的特性:扩展、协议、泛型
swift的特性:扩展.协议.泛型 扩展与继承:对象的生长方式: 协议:支持 协议->类型.类型<-协议 的双向抽象: 泛型:
- swift新特性(__nullable和__nonnull
http://www.mamicode.com/info-detail-923593.html 最近在看老师写代码的时候经常遇到两个陌生的关键字,但是当我在我的电脑上敲得时候就是敲不出,后来才知道这是 ...
- swift 声明特性 类型特性
原文地址:http://www.cocoachina.com/newbie/basic/2014/0612/8801.html 特性提供了关于声明和类型的很多其它信息.在Swift中有两类特性,用于修 ...
- swift语言特性
最近苹果推出了他们新的开发语言,swift,他们自己的说法是,swift语言将会更快捷,更安全等等.但是具体的性能,还需要在后面的实践过程中去观察,但是就目前来说swift语言除了将大部分21世纪静态 ...
- iOS 之 Swift 新特性
支持所有C和OC的基本类型 提供了Array 和Dictionary两个强劲的集合类型 元组 可选类型 闭包 脚本特性 类型安全
- C#新特性记录
C#6.0新特性笔记 Getter专属赋值 可以在构造函数中,给只有get的属性赋初始值. class Point { public int x { get; } public Point() { x ...
- swift 手机号码正则表达式 记录一下
func isTelNumber(num:NSString)->Bool { var mobile = "^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$&qu ...
随机推荐
- #425[div2]
A 签到 #include<bits/stdc++.h> using namespace std; typedef long long ll; int main(){ ll n,k; ci ...
- Asp.net Core 使用 EntityFrameworkCore 1.1
前言 相比大家也在开发中是非常喜欢用ORM的.今天就来介绍一下EntityFrameworkCore的使用方法. 自从EF Core升级到1.1之后,确实变化挺大的.如果没试过真的不知道坑是挺多的.今 ...
- ubuntu-12.04.5安装cacti笔记
坑啊,磨磨蹭蹭按了一个星期.按了3个版本. 第一次:cacti-0.8.7e.tar.gz 安装完之后,Host: Localhost->Memory Usage...四张图始终出不了.点击进去 ...
- POJ 3693 Maximum repetition substring (后缀数组+RMQ)
题意:给定一个字符串,求其中一个由循环子串构成且循环次数最多的一个子串,有多个就输出最小字典序的. 析:枚举循环串的长度ll,然后如果它出现了两次,那么它一定会覆盖s[0],s[ll],s[ll*2] ...
- Saving output of a grep into a file with colors
19 down vote favorite 7 I need to save the result of a grep command into a file, but I also want the ...
- SuperSocket框架中BinaryRequestInfo协议的使用
一.开发环境 1.Windows 10 企业版 64位 2.Microsoft Visual Studio 2017 企业版 二.项目开始 1.新建控制台程序,项目名称“BinarySuperSock ...
- .Net Core中依赖注入服务使用总结
一.依赖注入 引入依赖注入的目的是为了解耦和.说白了就是面向接口编程,通过调用接口的方法,而不直接实例化对象去调用.这样做的好处就是如果添加了另一个种实现类,不需要修改之前代码,只需要修改注入的地方将 ...
- Linux中网卡相关命令以及SSH连接远程主机
ifconfig 命令 查看与配置网络状态命令 关闭与启动网卡 ifdown 网卡设备名 禁用该网卡设备 ifup 网卡设备名 启用该网卡设备 查询网络状态 netstat 选项 -t 列出TCP协议 ...
- 最大子序列和——HDU-1003 Max Sum
题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义dp[i]表示以a[i]为结尾的子序列的和的最大值,因而最大 ...
- 2014-11-3 NOIP模拟赛3
字符串 string.pas/c/cpp 1S/256MB [题目描述] 现在给一个字符串,你要做的就是当这个字符串中存在两个挨着的字符是相同的时就将这两个字符消除.需要注意的是,当把这两个字符消除后 ...