Swift语言错误处理

2017-06-07  本文已影响17人  野比大雄001

1.swift在运行时对可恢复错误的抛出、捕获、传递和操作的支持。

2.在swift中,错误用符合ErrorType协议的类型的值来表示:

enum VendingMachineError: ErrorType {

case InvalidSelection//选择无效

case InsufficientFunds(coinsNeeded: Int) //金额不足

case OutOfStock//缺货

}

3.swift中有4种处理错误的方式:

a.把函数抛出的错误传递给调用此函数的代码throwing函数

b.用do-catch语句处理错误do...catch

c.将错误作为可选类型处理try?

d.或者断言此错误根本不会发生try!

为了表示一个函数、方法或构造器可以抛出错误,在函数声明的参数列表之后加上throws关键字。一个标有throws关键字的函数被称作throwing函数。如果这个函数指明了返回值类型,throws关键词需要写在箭头(->)的前面。

方式一:用throwing函数传递错误

func vend(itemNamed name: String) throws{}

func canThrowErrors() throws -> String{}

如果在调用系统某一个方法时,该方法最后有一个throws.说明该方法会抛出异常.如果一个方法会抛出异常,那么需要对该异常进行处理

方式二:try方式程序员手动捕捉异常

do {

try NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)

} catch {

// error异常的对象

print(error)

}

方式三:try?方式(常用方式)系统帮助我们处理异常,如果该方法出现了异常,则该方法返回nil.如果没有异常,则返回对应的对象

guard let anyObject = try? NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers) else {

return

}

方式四:try!方法(不建议使用,非常危险)直接告诉系统,该方法没有异常.注意:如果该方法出现了异常,那么程序会报错(崩溃)

let anyObject = try! NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)

4.swift中指定清理操作:

可以使用defer语句在即将离开当前代码块时执行一系列语句。例如,你可以用defer语句来确保文件描述符得以关闭,以及手动分配的内存得以释放。

defer语句将代码的执行延迟到当前的作用域退出之前。延迟执行的操作会按照它们被指定时的顺序的相反顺序执行——也就是说,第一条defer语句中的代码会在第二条defer语句中的代码被执行之后才执行,以此类推。

func processFile(filename: String) throws {

if exists(filename) {

let file = open(filename)

defer {

close(file)

}

while let line = try file.readline() {

//处理文件。

}

// close(file)会在这里被调用,即作用域的最后。

}

}

上一篇下一篇

猜你喜欢

热点阅读