swift语言是苹果公司在2014年WWDC开发者大会上推出的新的开发语言,时至一年,swift经历了几番变更,在2015年的新过去的开发者的会上,苹果推出swift正式版2.0.并在2015年年底开放源代码,不得不说,这是一件很碉碉的事,其实swift开源的意义对于开发者来讲,主要是可以在更多地平台上面使用swift开发语言开发应用,不得不说,苹果公司也是放了一个大招。
小编也斗胆把自己当做swift语言的一个爱好者。小编几个月的学习当中,不得不说,swift开发语言让小编感受到的是痛快淋漓。不扯淡,下面讲一下swift2.0相对于swift1.2版本所做的更新。
1.错误处理 Error Handing
swift2.0引入的新的 ErrorType协议 ,产生得错误要进行throw要遵守ErrorType协议,才可以对错误进行throw,这里我们用一个枚举类型,列举一个产生错误的原因
enum errorPlayGame:ErrorType { case noMoney case noTime case noFriendToGether }这里的枚举类型errorPlayGame遵守ErrorType协议,这样子产生的错误才可以正常throw
举个简答的例子吧。我想和朋友去打游戏,但是不知道在那一天有没有时间,钱或者有没有人陪。那么我们编写程序如下
//定义枚举类型errorGame遵守ErrorType协议 enum errorGame:ErrorType { case noMoney case noTime case noFriendToGether } let money = 0 let time = 23 let numOfMyFriend = 2 //定义一个去打游戏的方法 func PlayGame() throws { guard money > 0 else { throw errorGame.noMoney } guard time > 0 else { throw errorGame.noTime } guard numOfMyFriend > 0 else { throw errorGame.noFriendToGether } } //定义一个开始去游戏方法,调用PlayGame。catch异常。 func startGame() { do { try PlayGame() print("starting Game") } catch errorGame.noMoney { print("no money") } catch errorGame.noTime { print("no Time") } catch errorGame.noFriendToGether { print("no friend play Game with me") } catch { } } startGame()这里的 money 小于 0,所以程序会抛出异常, 程序的思路比较容易理解,讲一下注意的几点,startGame方法中,do { }要做的就是开始执行里面程序,try抓取异常,如果执行成功,那么打印出 "starting Game"。cathch 完枚举的三个错误以后,要把catch关闭,即最后加入一个空的catch,否则则会报错 Error throw from are not handled because the enclosing catch is not exhaustive 意思就是catch没有关闭。
在PlayGame方法中有这样一个关键词 guard。这个其实简单明了的来说,其实gaurd的作用就是一个门卫的作用,简单举个例子
guard numOfMyFriend > 0 else { throw errorGame.noFriendToGether }只有numOfMyFriend >0 的时候,才可以执行下面的程序。否则(else)就抛出一个异常。类似看门大叔说,有牌吗?有牌才能进大门。
2.绑定 Binding
guard let pants = pants, frog = frog else { // sorry, no frog pants here :[ return } // at this point, frog and pants are both unwrapped and bound!
gaurd这个新的语法允许你在一个代码周期中构建一个提前的退出点。这样子可以让代码更为清晰
3.协议拓展 Protocol Extensions
协议拓展不得不说是良心之作啊。协议拓展是在新的swift2.0里才加入的,之前的拓展,主要是对已有的class , struct 和枚举类型,对它的方法进行拓展,新的swift语法可以对协议进行拓展。举个例子。
protocol 速度 { func 百公里加速时间() -> Double } struct 凯迪拉克:速度{ var 价格:Int func 百公里加速时间() -> Double { return 1.5 } } let 凯迪拉克1 = 凯迪拉克(价格: 20000000) 凯迪拉克1.百公里加速时间() //此时我想获取卡迪拉克的排名,例如1.5就排名 1.5 * 100 extension 速度{ var 排名:Int { get { return Int(百公里加速时间() * 100) } } } 凯迪拉克1.排名
这里对协议拓展增加排名的功能,
凯迪拉克1.排名 输出排名
4.有效性检查
这个主要是为了兼容一些老的ios版本。主要作用是可以检验一些新的API是否在一些老版本适用,包括OS X,IOS, Watch OS的软件开发
if #available(iOS 8.0, OSX 10.10, *) { // 当版本匹配时使用Handoff APIs. let activity = NSUserActivity(activityType:"com.example.ShoppingList.view") activity.becomeCurrent() } else { print("此API不可用") }
5. do ...while循环更名
do .. while循环更改成repeat .. while循环,主要是也是为了跟之前错误处理的do区别开来,也是更加直观,
var j = 1 repeat { j++ print(j) }while(j <= 10)更多文章关注goofyy的网站 。