微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift 2.0语法更新一

1. Error Handling

在Swift中,用满足ErrorType协议类型来表示Error。

enum vendingMachingError: ErrorType {
case InvalidSelection
case InsufficientFunds(required: Double)
case OutOfStock
}

为了表明一个函数或者方法会抛出错误,你需要在它的声明之后添加throws关键字,如果不提前声明,则不可抛出错误

func canThrowErrors() throws -> String
func cannotthrowErrors() -> String

在可抛出错误函数体中的任意位置都可用throw语句抛出错误

struct Item {
var price: Double
var count: Int
}

var inventory = [
"Candy Bar" : Item (price: 1.25 ,count: 7 ),
"Chips" : 1.00 ,216)">4 ),27)">"Pretzels" : 0.75 ,216)">11 )
]

var amountDeposited = 1.00

func vend(itemNamed name: String ) throws {
guard var item = inventory [name] else {
throw
vendingMachingError . InvalidSelection
}

guard item. count > 0 throw @H_36_404@OutOfStock
}

if amountDeposited >= item. price {
amountDeposited -= item. price
--item.
count
inventory [name] = item
}
let amountrequired = item. price - amountDeposited
InsufficientFunds (required: amountrequired)
}
}

在你调用一个可能throw的函数时,你需要在前面加上try关键字。

let favoriteSnacks = [
"Alice" : "Chips" ,27)">"Bob" : "Licorice" ,27)">"Eve" : "Pretzels"
]

func buyFavoriteSnacks(person: let snackName = favoriteSnacks [person] ?? "Candy Bar"
try vend (itemNamed: snackName)
}

如果在某些情况下你知道一些可抛出错误函数在运行时不会抛出错误,你可以使用try!关键字来代替普通的try。

func willOnlyThrowIfTrue(value: Bool ) throws {
if value {
throw someError
}
do {
try willOnlyThrowIfTrue ( false )
}
catch {
//Handle Error
}
}

try ! false )

defer关键字内的语句直到离开当前代码块时才会被执行。这些语句让你能做一些必要的清理工作,不论当前代码块内有没有错误出现,defer内的语句都会执行。而且defer的执行顺序和它们被定义的顺序是相反的,比如第一个定义的defer会在第二个定义的defer之后执行

func processFile(filename: String ) if exists(filename) {
let file = open(filename)
}
defer {
close (file)
}
while let line = try file.readline() {
//Work with the file.
}
//close(file) is called here,at the end of the scope.
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐