Ios

as에 대해서 알아보자

잘먹는 개발자 에단 2024. 8. 16. 14:13

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.")