728x90
타입 확장
프로토콜
구현해야 할 요구사항을 정의하는 문법
- 프로토 타입을 제시하는 것이므로 기능을 직접적으로 구현하지 않음
protocol Protocol1 {
// property
var var1: Int { get set }
var var2: String { get }
//method
func func1()
// initializer
init(var1: Int, var2: String)
}
- 프로퍼티 요구: 항상 var 키워드 사용
- get, set을 모두 명시하면 읽기 쓰기 모두 가능한 프로퍼티
- get은 읽기만 가능해도 상관 없음
- 메서드 요구
- 이니셜라이저 요구
채택과 준수
- 채택(adopted): 구조체, 클래스, 열거형에서 프로토콜을 사용하는 것
- 준수( conform): 프로토콜을 구현하는 것
struct Class1: Protocol1 {
var var1: String
let var2: String // get 만 가능하면되므로 let이든 var든 상관없음
// 연산 프로퍼티로 대체 가능
// var topic: String {
// set { }
// get { }
// }
// var language: String {return "Korean"}
func func1() {
print("func!!")
}
init(var1: Int, var2: String) {
self.var1 = var1
self.var2 = var2
}
}
프로토콜 준수 확인
- is, as를 사용해서 확인 할수 있음
프로토콜 상속
- 클래스와 다르게 다중 상속 가능함
- 클래스에서 프로토콜을 상속받을수 있음.
- 클래스 상속은 하나만 가능하므로 무조건 맨 앞에 명시해야함
- 프로토콜은 그 뒤에 나열
익스텐션 Extension
구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할수 있는 기능
구현된 소스코드를 볼수 없거나 알지 못하는 경우 타입만 알고 있으면 타입의 기능을 확장할수 있음
- 프로퍼티, 메서드, 이니셜라이저, 서브스크립트, 중첩 타입 등
extension TypeName1: Protocol1, ... {
}
예제
extension Int {
var isEven: Bool {
return self % 2 == 0
}
var isOdd: Bool {
return self % 2 == 1
}
}
extension Int {
func mult(by n: Int) -> Int {
return self * n
}
}
extension String {
init(intTypeNumber: Int) {
self = "\\(intTypeNumber)"
}
}
'STUDY > Swift & iOS' 카테고리의 다른 글
[Swift] 38. Responding to User Interactions with IBActions (0) | 2023.01.16 |
---|---|
Swift 문법 기초 8 (0) | 2022.06.27 |
Swift 문법 기초 6 (0) | 2022.06.25 |
Swift 문법 기초 5 (0) | 2022.06.21 |
Swift 문법 기초 4 (0) | 2022.06.20 |