
Error handling
Throw
Swift 에서 함수는 throw 키워드를 선언부 뒤에 붙여서 에러를 발생시킬 수 있음을 나타낼 수 있습니다.
func foo() throws { }
do-catch
do-catch 구문을 이용해 에러 처리를 할 수 있습니다. 에러가 날 수 있는 구문을 do 블럭 안에 try와 함께 작성하는 것으로 처리할 수 있습니다.
do {
try 표현식
print("end")
} catch pattern 1 {
print("pattern 1 에러")
} catch pattern 2 {
print("pattern 2 에러")
}
Any & AnyObject
Any 👉 함수타입을 포함해서 모든 타입의 인스턴스를 나타낼 수 있습니다.
AnyObject 👉 모든 클래스타입의 인스턴스를 나타낼 수 있습니다.
함수의 인자를 지정하거나 변수의 타입을 지정할 때 모호하게 정의하는 방식으로 개발할 때 추천하는 방법은 아니라고 합니다. 이 개념을 설명하는 부분이 데이터 타입은 항상 명확하게 나타내는 것이 코드를 더 단단하게 하는 방법이라는 생각이 들었던 부분이었습니다.
Int 배열에는 Int 타입의 숫자만 들어가지만 Any 배열은 숫자, 문자열, 배열이 들어가도 컴파일이 되는 것을 확인할 수 있었습니다.
var intArr: [Int] = []
intArr.append(1)
intArr.append(2)
intArr.append("3") // 에러가 발생한다!
var anyArr: [Any] = []
anyArr.append(1)
anyArr.append("2")
anyArr.append(intArr)
AnyObject 배열에는 클래스 타입의 변수만 들어가는 것을 확인할 수 있었습니다.
class A {}
class B {}
var anyObject: [AnyObject] = []
anyObject.append(A())
anyObject.append(A())
anyObject.append(B())
anyObject.append(1) // class 변수가 아니라 에러가 발생한다!
❗️ Any, AnyObject 개념을 배우긴 하지만 CS193P 강의 데모에서는 사용하지는 않습니다.
Casting
함수의 반환 값이나 변수의 값이 불확실할 경우 as 키워드를 사용해서 값의 타입을 지정할 수 있습니다. 이것을 타입 캐스팅이라고 합니다.
as? 👉 특정 타입이 맞는지 확신할 수 없을때 사용합니다. (Optional 값을 반환합니다.)
as! 👉 특정 타입이라는 것이 확실한 경우에 사용합니다.
func foo() -> Any { return "Hello" }
let optionalValue = foo() as? String
print(optionalValue) // Optional("Hello") 출력
let value = foo() as! String
print(value) // Hello 출력
'CS193P' 카테고리의 다른 글
[iOS] 스탠포드 CS193P 6강 (0) | 2021.08.31 |
---|---|
[iOS] 스탠포드 CS193P 5강 - 2 (0) | 2021.08.20 |
[iOS] 스탠포드 CS193P 4강 (0) | 2021.08.18 |
[iOS] 스탠포드 CS193P 3강 (0) | 2021.08.18 |
[iOS] 스탠포드 CS193P 2강 (0) | 2021.08.15 |