Extension (확장)
- 기존의 클래스, 구조체, 열거형 또는 프로토콜의 기능을 확장하거나 추가할 수 있는 기능
- 기존 타입의 코드를 수정하지 않고도 새로운 기능을 추가하거나 수정 가능
- 소스 코드의 모듈성을 높이고 코드의 재사용성과 가독성을 향상 시키는 방법
1. 새로운 계산 프로퍼티 추가
- Extension은 저장 프로퍼티는 추가할 수 없으며 오로지 '연산 프로퍼티'만 추가 가능
- extension은 저장 프로퍼티 추가 불가능
import UIKit
extension Int {
var squared : Int {
return self * self
}
}
let num = 10
print(num.squared) // 100
- extension을 사용하여 기존 타입에 계산 프로퍼티 추가 가능
2. 새로운 메서드 추가
- 기존 타입에 새로운 메서드를 추가하여 기능을 확장할 수 있음
extension String {
func greet(){
print("Hello, \(self)")
}
}
let swift = "Swift"
print(swift.greet()) // Hello, Swift
3. 이니셜라이저 추가
- 새로운 이니셜라이저를 추가하여 초기화 과정을 확장할 수 있음
extension Int {
init?(value : String){
self.init(value)
}
}
let stringValue = "42"
print(type(of: stringValue)) // String
let intValue = Int(value: stringValue) // 42
print(type(of: intValue)) // Optional<Int>
- String 타입의 값을 Int 타입으로 변환하기 위한 Extension을 사용
4. 코드 가독성 높이기
- 하나의 ViewController에서 TableViewDataSource, CollectionViewDataSource를 채택한다면 구현해야 하는 필수 메서드가 많아 복잡해짐
class ViewController: UIViewController, UITableViewDataSource, UICollectionViewDataSource {
override func viewDidLoad() {
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
}
}
- Extension 활용하여 보다 가독성 있게 정리 가능
class ViewController: UIViewController {
override func viewDidLoad() {
}
}
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
}
}
extension ViewController: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
}
}
'Swift' 카테고리의 다른 글
Swift - Dictionary (0) | 2023.09.02 |
---|---|
Swift - HIG (Human Interface Guide) (0) | 2023.08.28 |
Swift - Class, Struct, Enum (0) | 2023.08.23 |
Swift - mutating (0) | 2023.08.22 |
Swift - DispatchQueue (0) | 2023.08.22 |