• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

swift 异常捕获try catch的使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

新的异常捕获机制更新于 WWDC 2015上发布的新的Swift2.0,异常的try-catch机制有助于我们更快的定位出错原因所在,此处简单说明下try-catch机制的用法.

 

1.定义枚举异常值

    首先我们可以创建自己的异常枚举值,这要实现ErrorType协议,只不过这个协议是空的,我们加上就好.

 

2.抛出异常

   我们可以在方法中抛出异常,定义抛出异常的方法很简单,只需要在返回值的 -> 前面加上throws就好了,示例如下:(这个方法是自定义的Dog类里的一个实例方法,name.length()是为系统的String类通过延展添加的方法)



 

 

3.捕获异常

  我们可以在调用可能抛出异常的方法后面加上catch关键字来捕获异常


 

 

4.不处理异常

如果确定某段可能抛出异常的代码是不可能抛出异常的,则可以使用try!来进行调用,但是如果一旦这段代码抛出了一个异常,则会引起一个运行时的异常错误,所以请慎用.

结尾:

值得注意的是,在可能抛出异常的方法中,一但有一处抛出了一个异常,那么这个方法则会立刻停止运行.抛出异常代码后面的代码都将不会得到执行

 

 

附自定义Dog类和调用Dog类的代码

enum DogError : ErrorType{
    case NameInvalidError
    case AgeInvalidError
    case NameLengthError
}

class Dog: NSObject {
    var name : String!
    var age : Int!
    init(name:String,age:Int){
        self.name = name
        self.age = age
    }
   
    func printDogMessage(dog:Dog) throws -> String{
        print("Dog-Class:开始检查名字是否无效")
            guard let name : String = dog.name else{
                throw DogError.NameInvalidError
            }
        print("Dog-Class:开始检查名字长度是否无效")
            if name.length() < 3{
                throw DogError.NameLengthError
            }
        print("Dog-Class:开始检查年龄是否无效")
            if age < 0 || age > 20{
                throw DogError.AgeInvalidError
            }
        print("Dog-Class:返回信息")

        return "dog的信息为" + dog.name + "\(dog.age)"

    }

}

 

测试方法的代码:


    

let myDog = Dog(name: "小白", age: 21)

        var str : String!

        do{
        try str = myDog.printDogMessage(myDog)
        }
        catch {
            switch (error){
            case DogError.NameInvalidError: print("dog的名字无效错误")
            case DogError.NameLengthError : print("dog的名字长度错误")
            case DogError.AgeInvalidError : print("dog的年龄设置不合法")
            default:print("Main:捕获到dog其他错误")
            }
        }

        print("Main:最后输出为\(str)")

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[Swift]LeetCode314.二叉树的竖直遍历$BinaryTreeVerticalOrderTraversal发布时间:2022-07-13
下一篇:
[Swift]LeetCode55.跳跃游戏|JumpGame发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap