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 | 31 |
Tags
- where Self
- C++
- Cpp
- Unreal static Framework
- github
- 알고리즘
- protocol 기본구현
- 깃헙
- 2차원배열
- 동적할당
- Git
- unreal dynamic framework
- git status
- 깃허브 가이드
- 리눅스 명령어
- 깃 명령어
- 인프런
- Unreal iOS
- Unreal iOS Framework
- Algorithm
- PS
- Problem Solving
- 백준
- 깃허브
- new int
- IOS
- embed&sign
- Swift
- ios framework
- 깃허브 사용법
Archives
- Today
- Total
Get Up & Code, MacKin Talk
프로토콜과 기본 구현 extension ProtocolA where Self: Type 프로토콜 타입 제약 방법 본문
프로토콜과 그 기본 구현을 활용해 중복을 피할 수 있다.
Swift에서는 프로토콜의 익스텐션을 활용할 때 where 절을 사용해 타입 지정 방법을 제공
해당 익스텐션이 적용될 수 있는 타입의 범위를 제한할 수 있도록 해준다.
예시로
extension AProtocol {
// methods...
}
프로토콜을 정의할 때 특별한 타입 제약을 지정하지 않은 경우, 그 프로토콜은 어떤 타입에서든 채택할 수 있음.
- 클래스, 구조체, 열거형 등
extension AProtocol where Self: UIView {
// methods...
}
특정 타입에만 프로토콜을 적용하고 싶은 경우
where Self: UIView
Aprotocol을 확장하되, 그 확장의 범위는 UIView의 서브 클래스인 타입에만 적용한다는 의미
이 방식으로 사용할 경우, 프로토콜의 확장 내부에서 UIView의 특성이나 메서드를 안전하게 사용 가능.(서브클래스임을 보장할 수 있음)
하단처럼 CustomDrawable이라는 프로토콜을 생성했다고 했을 때
protocol CustomDrawable {
func draw()
}
// UIView를 상속받는 타입에만 기본 구현을 제공
extension CustomDrawable where Self: UIView {
func draw() {
print("Drawing on a UIView or its subclass")
}
}
class MyView: UIView, CustomDrawable {
// MyView는 UIView를 상속받기 때문에, CustomDrawable의 기본 구현을 사용할 수 있음
}
class MyNonViewClass: CustomDrawable {
// MyNonViewClass는 UIView를 상속받지 않기 때문에, draw() 메서드를 직접 구현해야 함
func draw() {
print("Drawing in a non-UIView class")
}
}
프로토콜의 제한범위가 생겼기 때문에 where 절을 충족하는 UIView의 서브클래스들만 해당 프로토콜 제공하는 기능을 사용할 수 있음.
추가)
상속과 차이가 있다면,
상속의 경우, 자식 클래스가 부모 클래스의 특성을 모두 받아오는 것을 의미
반면 프로토콜과 익스텐션은 타입에 특정 메서드 또는 계산 프로퍼티를 추가할 수 있는 방법을 제공.
'IOS' 카테고리의 다른 글
iOS @available 속성 설정 (0) | 2024.04.23 |
---|---|
new Framework(*) Unreal Engine에서 iOS Framework 적용하기 (0) | 2024.04.09 |
CFBundleURLSchemes 과 LSApplicationQueriesSchemes (0) | 2024.03.05 |
DYLD, Dynamic Link Editor이 무엇일까? (2) | 2023.10.16 |
[iOS] 자주 사용하는 컴파일 조건구문에 대하여 (#if, #endif, canImport 등) + available, unavailable (1) | 2023.10.10 |