Swift-18: 오류 처리(Error handling)
1 오류 표시 및 던지기
Error
빈 프로토콜은 이 유형이 오류 처리에 사용할 수 있음을 나타낸다enum VendingMachineError: Error {
case InvalidSelection //
case InsufficientFunds(coinsNeeded: Int) //
case OutOfStock //
}
throw VendingMachineError.InsufficientFunds(coinsNeeded: 5)
2 오류 처리
코드에서 오류가 발생할 수 있는 부분을 표시하기 위해 오류가 발생할 수 있는 함수, 방법, 구조기를 호출하기 전에try 키워드나 try를 추가하시겠습니까?또는try!이런 변체.
오류를 처리하는 네 가지 방법:
func canThrowErrors() throws -> String
func cannotThrowErrors() -> String
throwing 함수는 내부에서 오류를 던져서 함수가 호출될 때의 역할 영역에 오류를 전달할 수 있습니다.throwing 함수만 오류를 전달할 수 있습니다.어떤 비throwing 함수 내부에서 던져진 오류는 함수 내부에서만 처리할 수 있습니다.
struct Item {
var price: Int
var count: Int
}
class VendingMachine {
var inventory = [
"Candy Bar": Item(price: 12, count: 7),
"Chips": Item(price: 10, count: 4),
"Pretzels": Item(price: 7, count: 11)
]
var coinsDeposited = 0
func dispenseSnack(snack: String) {
print("Dispensing \(snack)")
}
func vend(itemNamed name: String) throws {
guard let item = inventory[name] else {
throw VendingMachineError.InvalidSelection
}
guard item.count > 0 else {
throw VendingMachineError.OutOfStock
}
guard item.price <= coinsDeposited else {
throw VendingMachineError.InsufficientFunds(coinsNeeded: item.price - coinsDeposited)
}
coinsDeposited -= item.price
var newItem = item
newItem.count -= 1
inventory[name] = newItem
dispenseSnack(snack: name)
}
}
let favoriteSnacks = [
"Alice": "Chips",
"Bob": "Licorice",
"Eve": "Pretzels",
]
func buyFavoriteSnack(person: String, vendingMachine: VendingMachine) throws {
let snackName = favoriteSnacks[person] ?? "Candy Bar"
try vendingMachine.vend(itemNamed: snackName)
}
// throwing throwing 。
struct PurchasedSnack {
let name: String
init(name: String, vendingMachine: VendingMachine) throws {
try vendingMachine.vend(itemNamed: name)
self.name = name
}
}
var vendingMachine = VendingMachine()
vendingMachine.coinsDeposited = 8
do {
try buyFavoriteSnack(person: "Alice", vendingMachine: vendingMachine)
} catch VendingMachineError.InvalidSelection {
print("Invalid Selection.")
} catch VendingMachineError.OutOfStock {
print("Out of Stock.")
} catch VendingMachineError.InsufficientFunds(let coinsNeeded) {
print("Insufficient funds. Please insert an additional \(coinsNeeded) coins.")
}
// “Insufficient funds. Please insert an additional 2 coins.”
func someThrowingFunction() throws -> Int {
// ...
return 0
}
let x = try? someThrowingFunction()
let y: Int?
do {
y = try someThrowingFunction()
} catch {
y = nil
}
try!
오류 전달을 금지하고 오류가 발생하면 실행 오류가 발생합니다.let photo = try! loadImage("./Resources/John Appleseed.jpg")
3 정리 작업 지정
playground 파일이 andyRon/LearnSwift에 있음
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.