Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- swiftUI
- Refactoring
- Xcode
- combine
- swift documentation
- Human interface guide
- Clean Code
- MVVM
- uiscrollview
- map
- tableView
- UICollectionView
- rxswift
- RxCocoa
- ios
- 리팩토링
- collectionview
- uitableview
- clean architecture
- ribs
- Observable
- SWIFT
- UITextView
- 리펙토링
- 클린 코드
- Protocol
- 리펙터링
- HIG
- 애니메이션
- 스위프트
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[swift] 9. 상속 및 다운캐스팅 본문
1. 특성
- 단일 상속만 지원
※ protocol은 다중 구현 가능
1
2
3
4
5
6
7
8
|
import UIKit
class C1{
}
class C2: C1, UIContentContainer, UIAppearanceContainer{ // 다중 구현한 protocol과 단일 상속한 C1구별
}
|
2. 오버라이딩
- override키워드 붙임
- 메서드 뿐만 아니라 연산프로퍼티 변수 또한 오버라이딩 가능
- 수정 할 수 있는 변수로 하려면 역시, set키워드 넣을 것
- didSet, willSet이용 가능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import UIKit
class Machine{
var name: String = ""
var age: Int {
return 10
}
final var hi: Int = 1 // cannot override in subclass
}
class Car: Machine {
override var name: String { // faild - name is only read
return "car"
}
override var age: Int{ // success
return 120
}
}
|
|
- 초기화 구문의 오버라이딩 : 서브클래스에서 수퍼클래스의 init을 super로 초기화해야함
※ "Initializer Delegation" : 단, 기본초기화 구문 init() 혹은 생략 되어 있으면 서브클래스 init에서 super.init으로 수퍼클래스 init을 연속적으로 실행해 주어야함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import UIKit
class A{
var value: Int
init(input: Int){
self.value = input
}
}
class B:A{
override init(input: Int){ // 매개변수 이름도 수퍼클래스와 동일해야함
}
}
let b: B = B(input: 123)
|
3. 타입 캐스팅
- 타입 캐스팅이 필요한 이유 : 서브 클래스는 자기 자신의 타입이면서도 동시에 수퍼 클래스의 타입이기도 함
상위클래스 타입으로 서브클래스들의 인스턴스를 받아도, 캐스팅하면 서브클래스 프로퍼티 이용가능
1
2
3
|
|
- 연산자 타입 확인 방법 : 왼쪽 인스턴스, 오른쪽 타입
1
2
3
|
Lee() is Lee // true
Lee() is Person // true
Person is Lee // false
|
- 다운캐스팅 : 선언은 수퍼클래스, 인스턴스는 서브클래스 형태 일 때, 두 가지 방법으로 캐스팅
다운캐스팅에서 오류가 발생하면 nil을 반환하므로 ?와!관련된 캐스팅만 존재
as?(결과는 옵셔널 타입), as!(결과는 일반 타입) 두 가지 방법 존재 (업 캐스팅은 as만 존재)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import UIKit
class A{
}
class B:A{
var name: String = "b"
}
let b: A = B()
b.name // error
if let bb = b as? B {
bb.name // success
}
|
4. AnyObject, Any
- AnyObject는 모든 클래스 타입의 수퍼클래스
- Any는 클래쓰 뿐만이 아닌 다른 자료형도 해당
'swift 5 문법' 카테고리의 다른 글
[swift] 11. 프로토콜 (protocol) (0) | 2020.03.29 |
---|---|
[swift] 10. 열거형과 익스텐션 (0) | 2020.03.29 |
[swift] 8. 구조체(struct)와 클래스(class), 프로퍼티 (0) | 2020.03.27 |
[swift] 7. 클로저(closure) (0) | 2020.03.26 |
[swift] 6. 함수(일급 함수) (0) | 2020.03.26 |
Comments