에러 처리(Error Handling)


🌟 스위프트에서 에러 처리

  • 메소드 내에서 원하는 결과가 나오지 않을 경우 에러를 발생시키기(throwing an error)
  • 메소드가 던진 에러를 잡아서 처리(error handling)
  • 에러 타입은 Error 프로토콜을 따르는 모든 값이 될 수 있음

✅ 에러 타입 선언

enum FileTrasferError: Error {
	case noConnection
   	case lowBandwidth
   	case fileNotFound
}
  • 예를 들어 원격 서버에 파일을 전송하는 메소드가 있다고 했을 때 네트워크 연결이 없거나, 네트워크 속도가 너무 느리거나, 전송할 파일을 찾지 못한다거나 하는 에러는 다음과 같이 Error 프로토콜을 따르는 열거형으로 표현

✅ guard 구문을 이용한 throwing an error

func transferFile() throws -> Bool {
	// 
}
  • 에러를 던질 때 throws 키워드 사용
  • 결과를 반환하는 메소드나 함수의 경우, throws 키워드는 반환 타입 앞에 위치
var connection = true
var connectionSpeed = 30.00
var fileFound = false

enum FileTransferError: Error {
	case noConnection
   	case lowBandwidth
   	case fileNotFound
}

func fileTransfer() throws {
	guard connection else {
    		throw FileTransferError.noConnection
    	}
    	guard connectionSpeed > 30 else {
    		throw FileTransferError.lowBandwidth
    	}
    	guard fileFound else {
    		throw FileTransferError.fileNotFound
    	}
}
  • 에러를 던지는 로직은 throws 구문의 throwguard 구문을 이용한다.
  • guard 구문의 조건문이 false 경우에는 else 절에 해당하는 error throwing이 발생한다.

➕ guard(빠른종료- Early Exit)

  • guard를 사용하여 잘못된 값의 전달 시 특정 실행구문을 빠르게 종료
  • 디버깅 모드 뿐만 아니라 어떤 조건에서도 동작
  • guard의 else 블럭 내부에는 특정 코드블럭을 종료하는 지시어(return, break 등)가 꼭 있어야 함
  • 타입 캐스팅, 옵셔널과도 자주 사용
  • 그 외에도 단순 조건 판단 후 빠르게 종료할 때도 용이

✅ 에러를 던지는 함수 호출

func checkSendingFile() -> String {
	do {
    		try fileTransfer()
 	} catch FileTransferError.noConnection {
    			return "No Network Connection"
    	} catch FileTransferError.lowBandwidth {
    			return "File Transfer Speed is Too Low"
    	} catch FileTransferError.fileNotFound {
    		return "File Not Found"
    	} catch {
    		return "Unknown Error"
    	}
    	return "Transfer Success"
}
  • 에러 핸들링 함수는 do-catch 구문과 사용
  • 파일전송을 체크하는 함수 :
    do 내에서 fileTransfer() 함수가 에러를 던질경우, catch 구문이 각 에러에 해당되는 문자열을 반환. 아무런 에러가 없을 경우 전송 성공 문자열을 반환.
  • 마지막 catch 는 'catch all' 구문으로, 패턴매칭이 이뤄지지 않은 모든 에러에 대해 "Unknown Error" 를 반환. do-catch 구문은 가능한 모든 에러에 대해 처리할 수 있도록 구성해야 함.
profile
iOS 개발자😺

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN