swift class type casting, initLanguage/Swift2022. 8. 24. 11:20
Table of Contents
클래스에는 상속이라고 해서 부모 클래스, 자식클래스 (기본 클래스, 파생 클래스 등 부르는 이름이 여러 개 입니다)를 이용해서 클래스의 특성들을 물려받을 수 있습니다.
class Animal {
var age: Int = 0
func glowOld() {
self.age += 1
}
}
class Cat: Animal {
var type: String = mixed
func getInTheBox() {
print("\(type) cat get in the box")
}
}
let nabi: Animal = Cat()
위 코드를 보게 되면 Cat은 Animal에 포함되기 때문에 Animal 타입의 상수에 할당할 수 있습니다.
반대로 Animal이라면 Cat 자식 클래스의 타입변수나 상수에 할당할 수 없습니다.
var white:Cat = Aniaml() // X
Up Castring
- 하위 클래스 타입을 상위 클래스 타입으로 변환할 때
- 캐스팅하기 전 타입이 하위 클래스, 캐스팅한 후 타입이 상위 클래스일 때
- 캐스팅한 결과, 캐스팅하기 전 타입보다 추상화될 때
- 일반적으로 캐스팅 과정에서 오류가 발생할 가능성이 없음
객체 as 변환할 타입
let anyCat: Cat = Cat()
let anyAnimal = anyCat as Aniaml
Down Casting
- 상위 클래스 타입을 하위 클래스 타입으로 캐스팅할 때
- 캐스팅하기 전 타입이 상위 클래스, 캐스팅한 후 타입이 하위 클래스일 때
- 캐스팅한 결과, 캐스팅하기 전 타입보다 구체화될 때
- 캐스팅 과정에서 오류가 발생할 가능성이 있음
- 오류에 대한 처리 방식에 따라 옵셔널 캐스팅과 강제 캐스팅으로 나누어짐
객체 as? 변환할타입 // Optional 타입
객체 as! 변환할타입 // Normal 타입
let anyYoungCat = anyAnimal as? Cat
if anyYoungCat != nil {
print("success")
}
AnyObject
모든 종류의 클래스 타입을 저장할 수 있습니다.
var list = [AnyObject]()
list.append(Cat())
lest.append(Animal())
init 초기화 메소드
init(<매개변수>: <타입> ...) {
// 1. 매개변수의 초기화
// 2. 인스턴스 생성 시 처리할 내용
}
class Table {
var height: Double
init() { self.height = 0.0 }
init(height: Double) {
self.height = height
print("\(height) 높이의 테이블이 만들어졌습니다
}
}
'Language > Swift' 카테고리의 다른 글
swift extensions (0) | 2022.08.24 |
---|---|
swift optional chain (0) | 2022.08.24 |
swift property observer (0) | 2022.08.23 |
swift date, dateFormatter 날짜 구하기 (0) | 2022.08.23 |
swift computed property 연산 프로퍼티 (0) | 2022.08.23 |
@jaewpark :: 코스모스, 봄보다는 늦을지언정 가을에 피어나다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!