zoukankan      html  css  js  c++  java
  • Swift 2.0

    1. guard 的使用

    guard 是守护的意识,它与 if 的使用类似。当 guard 后的表达式为假时,会执行 else 后面的内容。常用来判断某个情况是要特意避免的。如:

    guard let someValue = valueForKey("key") else {
        return
    }

    上面的代码使用 KVC 来获取一个值,如果获取失败,会直接返回。上面的代码与下面的代码是等价的,但是使用 guard 代码量要少很多。

    let someValue = valueForKey("key") 
    if someValue == nil {
        return
    }

    2. 异常处理

    swift 的异常处理在 swift2.0 中推出。 在 Cocoa Touch 中我们使用 NSError 来进行异常处理。在新的 Swift 2.0 中,我们可以使用新的 ErrorType protocol。

    在 Swift 中, enum 是最好的方法建立属于你自己的异常类型,你只要在你的 enum 中确认新的 ErrorType

    enum MyError: ErrorType {  
      case NotExist
      case OutOfRange
    }

    2.1 抛出异常

    如果某个函数要抛出异常,需要在函数名之后返回值之前加上 throw 关键字,如

    func fun1() throws -> String { // 有返回值
      ...
    }
    
    func fun2() throws {// 没有返回值
        guard let someValue = valueForKey("key") else {
            throw MyError.NotExist          
        }
    }

    2.2 处理异常

    使用 do-catch 语句来处理异常

    do {
        try functionWillThrowError()
    } catch MyError.NotExist {
        // deal with not exist
    } catch MyError.OutOfRange {
        // deal with not exist
    }

    接收所有异常

    do {
        ...
    } catch _ {
    
    }

    2.3 defer 

    defer 类似于 Java 中的 try/finally(标准 C++ 里没有try/finally,但是 BCB 里有,题外话),这种语句可以让我们在finally代码块中执行必须要执行的代码。

    与 finally 不同的是,defer 是延迟执行,会在代码块快要结束的时候执行 defer 里的代码。

    func doSomething() {
        print("CheckPoint 2")
        
        defer {
            print("Clean up here")
        }
        
        print("CheckPoint 3")
        
    }
    
    func checkSomething() {
        print("CheckPoint 1")
       
        doSomething()
        
        print("CheckPoint 4")
        
    }
    
    checkSomething() // CheckPoint 1, CheckPoint 2, CheckPoint 3, Clean up here, CheckPoint 4

    注意,如果你有多个defer 语句,他们在执行的顺序会和栈一样,最后一个进,第一个出。

    http://www.jianshu.com/p/96a7db3fde00

    https://www.baidu.com/s?wd=C%2B%2B%E6%9C%89%20try%2Ffinally%E5%90%97&rsv_spt=1&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=14&rsv_sug1=7&rsv_t=bd91SDWFT192HvMdQ7Yh2eYJF91%2BOjhu376ifEJoVU15qRZO3f9piAVfDkZZgaF3tp9o&rsv_sug2=0&inputT=4147&rsv_sug4=4342

  • 相关阅读:
    云服务器迁移的那些事之一
    《编译原理》(第二版)第一章的学习笔记(一)
    vs 实用扩展
    SQL多的是,你不知道的事
    Entity Framework 批量插入 提速
    oracle 回收已删除的表
    发现一个奇怪的问题!
    看到易办网的希望...
    asp.net不认为数据库字段的空值为null
    什么是伪url?
  • 原文地址:https://www.cnblogs.com/actionke/p/4794690.html
Copyright © 2011-2022 走看看