美文网首页
Swift 中NSAssert /try catch

Swift 中NSAssert /try catch

作者: 大也 | 来源:发表于2021-07-26 08:59 被阅读0次

1.Assert

//oc
- (void)assertfunction:(NSString *)email password :(NSString *)password {
  NSAssert(email.length < 8, @"invalid  email");
  NSAssert(password.length < 8, @"invalid password");
}
swift
func assertfunction(email: String ,password: String) {
  assert(email.count < 8, "invalid email")
  assert(password.count < 8, "invalid password")
}
//precondition为Swift独有(OC没有),使用方式与assert一样,第一个参数填写判断的条件第二个是message

precondition(condition: Bool, message: String)

2.try catch

//OC
- (void)trycatchfunction {
  @try {
      NSArray<NSString*> *list = @[];
      NSLog(@"list[1]===%@",list[1]);
  } @catch (NSException *exception) {
      NSLog(@"%@",exception.description);
  } @finally {
       
  }
}
//swift
//oc中的try catch,会将try中的异常捕获,然后会执行catch中的代码,Swift中的try catch步骤要多一些分为三步
1. 使用枚举定义异常值
enum RequestError :Error {//注意Swift的所有异常类型都继承于Error。
  case netError
  case serviceError
  case missingParameter(parameter: String)
  case isnil
}
2. 抛出异常
  if type == 1 {
      throw RequestError.netError
  }else if type == 2 {
      throw RequestError.serviceError
  }else if type == 3 {
      throw RequestError.missingParameter(parameter: "password")
  }
  return "success"
}
3.捕获异常(catch)
do {
  try str = throwErrors(type: 2)
   
  //不报错 下边会输出,报错则不执行
  print(str)
  // let array : [Int] = []
  // 如果执行 print(array[2])程序会崩溃,swift中的try catch 只能捕获事先定义好的异常,这点与OC有很大不同
} catch  {
  //报错则执行相对应的错误类型
   
  switch error {//这里要特别说明一下swift的error是异常,与OC中的NSError不是一回事,与OC中的NSException相似
  case RequestError.netError :
      print("是网络错误")
  case RequestError.serviceError :
      print("是服务端错误")
  default:
      print("缺少参数")
  }
}

//当然发现有异常,你也可以选择不处理
func findOptionsError(value :String?) throws -> [String] {`
guard let value = value else {
  throw RequestError.isnil
}
return [value]
}

let value = try? findOptionsError(value: nil)//此处异常会返回一个nil

let crash = try! findOptionsError(value: nil)//此处会崩溃


**try try? try!的区别** try : 执行函数后,如果有异常需要catch异常

try? :是可选性的执行,不报错的时候返回正常的值.如果有异常会返回一个nil,程序不会奔溃.

try! :是强制解包,当抛出异常的时候也解包,导致崩溃问题。

http://www.zyiz.net/tech/detail-117055.html

相关文章

网友评论

      本文标题:Swift 中NSAssert /try catch

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