IOS- 18

김정현·2023년 3월 24일
0

IOS 개발공부 일지

목록 보기
18/27

익스텐션

익스텐션은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있다. 기능을 추가하려는 타입을 구현한 소스 코드를알지 못하거나 볼 수 없다 해도, 타입만 안다면 그 타입의 기능을 확장할 수 있다.
그러나 기존에 존재하는 기능을 재정의할 수는 없다.

  • 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티
  • 타입 메서드 / 인스턴스 메서드
  • 이니셜라이저
  • 서브스크립트
  • 중첩타입
  • 특정 프로토콜을 준수할 수 있도록 기능 추가

위기능을 추가 할 수 있다.

extension 확장할 타입 이름 {
	타입에 추가될 새로운 기능 구현
}

extension 확장할 타입 이름: 프로토콜1, 2, 3 {
	프로토콜 요구사항 구현
}

연산 프로퍼티

extension Int {
	var isEven: Bool {
    	return self % 2 == 0
    }
    
    var isOdd: Bool {
    	return self % 2 == 1
    }
    
print(1.isEven) // fasle    //숫자로 넣어도 됨

var number: Int = 3
print(number.isEven)  //false

메서드

extension Int {
	func multiply(by n: Int) -> Int {
    	return self * n}
        .
        .
        .
    }

이니셜라이저

타입의 정의 부분에 이니셜라이저를 추가하지 않더라도 익스텐션을 통해 이니셜라이저를 추가할 수 있다.

클래스 타입에 편의 이니셜라이저는 추가가 가능하지만, 지정 이니셜라이저는 추가가 불가능하다.

extension String {
	init(intTypeNumber: Int) {
    	self = "\(intTypeNumber)"
    }
    
    init(doubleTypeNumber: Double) {
    	self = "\(doubleTypeNumber)"
    }
}

서브스크립트

extension String {
	subscript(addValue: String) -> String { 
    	return self + appedValue
    } 
     .
     .
     .
 }

이외에도 중첩 데이터 타입을 추가할 수도 있다. (후에 배움)

0개의 댓글