as
스위프트에서 as 키워드는 주로 타입 캐스팅에 사용됩니다.
3가지 형태로 주로 사용합니다.
as
as!
as?
사용되는 경우는 다음과 같습니다.
as
1. 업캐스팅
자식 클래스나 프로토콜을 부모 클래스나 프로토콜로 변환할 때 사용합니다.
업캐스팅은 항상 안전하기 때문에 강제로 변환해도 됩니다.
class Animal {}
class Dog: Animal {}
let dog = Dog()
let animal: Animal = dog as Animal
2. 프로토콜 캐스팅
특정 클래스나 구조체가 특정 프로토콜을 준수한다는 것을 명시할 때 사용됩니다.
protocol Pet {}
class Cat : Pet {}
let pet : Pet = Cat() as Pet
3. 리터럴 값을 특정 타입으로 변환할때도 사용됩니다.
let number = 42 as Double
// Int -> Double
as?
옵셔널 타입 캐스팅(다운캐스팅)에 사용됩니다.
실패할 가능성이 있어서, 실패할 경우에 nil을 반환하고 성공하면 결과를 반환합니다.
결과는 옵셔널 타입입니다.
class Animal{}
class Dog{}
class Cat{}
let animal : Animal = Dog()
if let dog = animal as? Dog{
print("This is a dog")
} else{
print("This is not a dog")
}
여기서 animal이 Dog 타입으로 성공적으로 캐스팅되면 dog에 할당되며, 그렇지 않으면 nil이 반환됩니다.
as!
강제 타입 캐스팅에 사용되며 실패하면 런타임 에러를 발생시키므로, 정말 조심해서 사용합니다.
class Animal {}
class Dog: Animal {}
class Cat: Animal {}
let animal: Animal = Dog()
let dog = animal as! Dog // 여기서 animal이 Dog이 아니면 런타임 오류 발생
print("This is definitely a dog.")
'Ios' 카테고리의 다른 글
클로저에 대해서 알아보자 (0) | 2024.08.16 |
---|---|
self에 대해서 알아보자 (0) | 2024.08.16 |
struct 그리고 class (0) | 2024.08.16 |
DispatchQueue에 대해서 알아보자! (0) | 2024.08.16 |
async-await / try (0) | 2024.08.16 |