美文网首页
错误和异常处理

错误和异常处理

作者: fordring2008 | 来源:发表于2017-02-05 12:31 被阅读48次

// 错误和异常处理

// 一些在开发阶段的错误,比如 向一个无法响应某个消息的 NSObject对象发送了消息,会得到 NSInvalidArgumentException的异常,或者数组越界会得到 NSRangeException。

// 在 OC 中的 NSError 往往是app开发中那些'合理的', 比如, 网络回调用户密码不匹配,读取已经被移除的文件生成 NSData 时

if let url = Bundle.main.url(forResource: "main.json", withExtension: nil) {    

let data = NSData(contentsOf: url)       

 let docDir = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]       

 let jsonPath = docDir.appending("/main.json")        

_ = data?.write(toFile: jsonPath, atomically: true)

}

// 在使用这个方法的时候,要么调用这个方法的时候,前面加入 try?, 要么 使用 do catch

// open func write(to url: URL, options writeOptionsMask: NSData.WritingOptions = []) throws

let data = NSData()

do {   

 try data.write(toFile: "hello", options: [])

}

 catch let error as NSError {   

print("Error:\(error.domain)")

}

// 这类异常是可以捕获,并判断的

enum LoginError: Error {    

case UserNotFound, UserPasswordNotMatch

}

// 账号密码存储的字典

let users = [String: String]()

func login(user: String, password: String) throws {    

if !users.keys.contains(user) {        

throw LoginError.UserNotFound    

}       

 if users[user] != password {        

throw LoginError.UserPasswordNotMatch    

}       

 print("Login successfully")}

// 这样 ErrorType 可以非常明确的指出问题所在。

 do {    

try login(user: "abc", password: "123")

}

 catch LoginError.UserNotFound {    

print("UserNotFound")

}

 catch LoginError.UserPasswordNotMatch {   

 print("UserPasswordNotMatch")

}

// 这种写法和 JAVA C# 不同, 他们是 try catch// 和枚举进行关联enum Result {    case Success(String)  // 可是使用泛型  Successcase Error(NSError)

}

func doSomethinagParam(param: AnyObject) -> Result {

let success : Bool

// ...

success = true

if success {

return Result.Success("成功完成")

} else {

let error = NSError(domain: "eooroDomain", code: 1, userInfo: nil)

return Result.Error(error)

}

}

// 使用的时候

let param = "dddd"

let result = doSomethinagParam(param: param as AnyObject)

switch result {

case let .Success(ok):

let serverResponse = ok

case let .Error(error):

let serverResponse = error.description

}

// 使用 try? func(throws) 表明是忽视了 error 并且在 error产生的时候得到一个 nil  例如

enum E: Error {

case Negative

}

func methodThrowsWhenPassingNegative(number: Int) throws -> Int{

if number < 0 {

throw E.Negative

}

return number

}

if let num7 = try? methodThrowsWhenPassingNegative(number: 100) {

print(num7)                // 100

print(type(of: num7))      // Int

}

// 在一个 throws 的方法里,不要返回一个 optional 值

相关文章

  • Java异常处理

    最近在学Java异常处理,码一下备忘。 异常和错误的区别和处理方式 首先,错误和异常都是程序运行中出现了问题,错误...

  • Java中异常和错误的区别及处理方式

    异常和错误的区别和联系 在Java中,异常和错误同属于一个类:Throwable。异常和错误都是Java异常处理重...

  • 错误和异常处理

    Python有两种错误很容易辨认:语法错误和异常。 1 什么是异常? 异常即是一个事件,该事件会在程序执行过程中发...

  • 错误和异常处理

    // 错误和异常处理 // 一些在开发阶段的错误,比如 向一个无法响应某个消息的 NSObject对象发送了消息,...

  • 错误和异常处理

    优雅的处理Pyhton错误或异常。 捕获一个异常。 捕获多个异常。 使用 finally 关键字,不管 try 代...

  • Swift中的异常处理

    1、错误和异常处理2、断言3、fatalError 1、错误和异常处理 在方法后面加throws关键字表示这个方法...

  • Python异常处理

    参考 Python菜鸟教程错误与异常 Python 异常处理 错误和异常 Python中(至少)有两种错误:语法错...

  • Swift3学习笔记:异常捕捉(Error Handling)

    异常捕捉(Error Handling) Swift的异常处理是在程序中响应错误和处理错误恢复程序正常运行的过程。...

  • PHP基础学习之路(3)

    这一次学习php的错误处理和异常处理主要介绍常见的错误和异常 常见错误 1.拼写错误 PHP中的常量和变量都是区别...

  • java异常处理机制

    标签(空格分隔): java 参考博客 注意:异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。 可查异...

网友评论

      本文标题:错误和异常处理

      本文链接:https://www.haomeiwen.com/subject/jufeittx.html