Swift 3.0異常エラーの処理
2134 ワード
OCでは,セルテスト時に断言を用い,断言中の条件が満たされると異常が発生し,対応する断言エラーが印刷される.Swiftでは異常の処理や投げ出しも他の言語のように処理できます.
印刷されます:the car begin move**overLoad**will will**
印刷:**lack of oil**will will**油が不足しているため、油量が足りない異常を放出した後、後の重量超過方法は実行されていませんが、will willは依然として実行されます.実はOCの中の異常処理は自分で処理したことがありません.本当に理解しにくいです.普通は直接印刷しても構いません.そして、errorがnilを伝えるのが一般的です.OCに関する異常処理を見たいなら、このNSErrorを見てください.http://nshipster.com/nserror/.
// , Error , , ,
enum CarError: Error{
case lackOil
case overload
}
//
enum Driver {
case start//
case loading//
}
// , ,
// , 10% 。
// , 2000
class Car {
var minOil: Double = 0.1
var maxCargo: Double = 2000.0// kg
//throws , do
func drivering(driver: Driver)throws {//
switch driver {
case .start:
//guard else if else , guard , else
guard self.minOil > 1.0 else {
throw CarError.lackOil // , catch
}
print("the car begin move")
case .loading:
guard self.maxCargo < 2000 else {
throw CarError.overload
}
print("the car begin working")
}
}
// ,
func workingCar(car: Car)throws {
//defer 。
defer {
print(" always run")
}
// do catch do , catch , do throws ,
// try! try! , 。
//try try , try? , Optional, nil
do {
// ,
try car.drivering(driver: .loading)
try car.drivering(driver: .start)
} catch let CarError.lackOil {
//
print(" lack of oil ")
} catch let CarError.overload {
print(" overLoad ")
}
}
//
let car = Car.init(oil: 0.5, cargo: 3000)
do {
try workingCar(car: car)
} catch {
}
印刷されます:the car begin move**overLoad**will will**
//
let car = Car.init(oil: 0.05, cargo: 1500)
do {
try workingCar(car: car)
} catch {
}
印刷:**lack of oil**will will**油が不足しているため、油量が足りない異常を放出した後、後の重量超過方法は実行されていませんが、will willは依然として実行されます.実はOCの中の異常処理は自分で処理したことがありません.本当に理解しにくいです.普通は直接印刷しても構いません.そして、errorがnilを伝えるのが一般的です.OCに関する異常処理を見たいなら、このNSErrorを見てください.http://nshipster.com/nserror/.