as
as
는 타입 변환(type casting)과 관련된 키워드로, 다음 세 가지 주요 상황에서 사용됩니다.as
는 어떤 타입을 부모 클래스 또는 프로토콜 타입으로 변환할 때 사용됩니다. 업캐스팅은 항상 안전하므로 옵셔널을 반환하지 않으며, 타입 변환이 확실할 때 사용합니다.class Animal {}
class Dog: Animal {}
let puppy = Dog()
let animal: Animal = puppy as Animal // Dog을 Animal로 업캐스팅
as
는 어떤 객체를 프로토콜 타입으로 캐스팅할 때도 사용됩니다. 타입이 해당 프로토콜을 준수하는 경우에만 가능합니다.protocol SoundMaking {
func makeSound()
}
class Cat: SoundMaking {
func makeSound() {
print("Meow")
}
}
let kitty = Cat()
let soundMaker: SoundMaking = kitty as SoundMaking // Cat을 SoundMaking으로 캐스팅
soundMaker.makeSound() // "Meow"
as
를 사용합니다. 이는 주로 특정 데이터 타입 간의 변환이 필요할 때 발생합니다.Any를 AnyObject로 캐스팅
let object: Any = "Hello"
if let anyObject = object as? AnyObject {
print(anyObject)
}
Collection 타입 변환
let array: [Any] = [1, 2, 3]
let intArray = array as? [Int] // 배열을 특정 타입으로 캐스팅
as?
nil
을 반환as!
as?
의 주요 특징let value: Any = "Hello"
if let stringValue = value as? String {
print("String 값: \(stringValue)")
} else {
print("캐스팅 실패")
}
as?
사용 예제as?
를 사용할 수 있습니다.let items: [Any] = ["Hello", 42, 3.14]
for item in items {
if let stringItem = item as? String {
print("String: \(stringItem)")
} else if let intItem = item as? Int {
print("Int: \(intItem)")
} else {
print("다른 타입: \(item)")
}
}
let button = UIButton()
let label = UILabel()
let views: [UIView] = [button, label]
for view in views {
if let buttonView = view as? UIButton {
print("이 뷰는 UIButton입니다.")
} else if let labelView = view as? UILabel {
print("이 뷰는 UILabel입니다.")
}
}
딕셔너리의 값이 다양한 타입으로 변환하여 사용합니다.
let json: [String: Any] = [
"name": "Alice",
"age": 25,
"isStudent": true
]
if let name = json["name"] as? String {
print("Name: \(name)")
}
if let age = json["age"] as? Int {
print("Age: \(age)")
}
if let isStudent = json["isStudent"] as? Bool {
print("Is Student: \(isStudent)")
}
as?
는 타입 변환을 시도하지만 실패 시 안전하게 nil을 반환합니다. 주로 UIKit 뷰 계층에서 서브클래스 타입을 확인하거나, JSON 데이터를 다룰 때 유용합니다. 안정성을 중요시하는 SWift의 철학에 부합하는 도구입니다.😊