/*注意点:
1:没有最后的catch{}还不行,报错.
2:调用能够抛出异常的函数的时候,得加try关键字。并且如果出现异常了,后面的就不执行了,直接进catch,
这个和别的语言一样~。
3:函数后面得加throws关键字,否则不让抛出异常。
4:try!这个东西得慎用,表示调用的是带抛出异常的函数,但一定不抛出异常。如果判断错误,出现异常就悲剧了~
5:标记throws的函数,抛出什么异常都无所谓,不一样类型都可以。
6:guard语法很特别,监测合法性,否则不往下执行。必须和else一起用。类似finally语法。
7:defer这个玩意在playground里面不执行,在正式工程里面没问题。
8:带附加数据的枚举异常,在catch的时候,得写附加值,比较能否catch到。
9:catch ...{}不要异常对象,catch let a as ...捕获后面的类型对象,就是看是否能类型转换成功~
*/
enum ErrorOverFlow:ErrorType{
case LowOverFlow(String,Int,Int)
case HighOverFlow(String,Int,Int)
case EmptyError(String)
func Description() -> String {
switch self {
case .LowOverFlow(let text, let minIndex, let CurrIndex):
return "\(text)Min:\(minIndex) currIndex:\(CurrIndex)"
case .HighOverFlow(let text, let maxIndex, let CurrIndex):
return "\(text)Max:\(maxIndex) currIndex:\(CurrIndex)"
case .EmptyError(let text):
return "\(text)"
}
}
}
enum ErrorIntValue:ErrorType{
case MaxValue(String,Int,Int)
case MinValue(String,Int,Int)
func Description() -> String {
switch self {
case .MinValue(let text, let minIndex, let CurrIndex):
return "\(text)Min:\(minIndex) currValue:\(CurrIndex)"
case .MaxValue(let text, let maxIndex, let CurrIndex):
return "\(text)Max:\(maxIndex) currValue:\(CurrIndex)"
}
}
}
class ErrorMustSix:NSError{
}
func GetValueByIndex(aArray: [Int], aIndex:Int) throws->Int {
guard !aArray.isEmpty else {
throw ErrorOverFlow.EmptyError("访问的数组内容为空")
}
guard aIndex < aArray.count else{
throw ErrorOverFlow.HighOverFlow("上标越界", aArray.count, aIndex)
}
guard aIndex >= 0 else{
throw ErrorOverFlow.LowOverFlow("下标越界", aArray.count, aIndex)
}
let rResult = aArray[aIndex]
guard rResult < 10 else{
throw ErrorIntValue.MaxValue("值太大", 10, rResult)
}
guard rResult > 1 else{
throw ErrorIntValue.MinValue("值太小", 1, rResult)
}
guard rResult > 5 else {
throw NSError(domain: "不能小于5啊!~", code: 5, userInfo: nil)
}
guard rResult < 7 else {
throw ErrorMustSix(domain: "不能大于7啊!~", code: 5, userInfo: nil)
}
return rResult
}
func CatchThrow() -> Void {
defer{
print("收尾了")
}
do{
let rResult = try GetValueByIndex([1,2,6],aIndex: 2)
print(rResult)
}
catch ErrorOverFlow.LowOverFlow("下标越界", 2, -1){
print("a")
}
catch let e as ErrorOverFlow {
print(e.Description())
}
catch let e as ErrorIntValue{
print(e.Description())
}
catch let e as ErrorMustSix{
print(e)
}
catch let e as NSError{
print(e)
}
catch{
}
}
CatchThrow()
参考:http://www.swiftvip.cn/guide/chapter2/18_Error_Handling.html
[swift学习之九]异常处理
最新推荐文章于 2024-04-24 15:55:12 发布