Danny의 iOS 컨닝페이퍼
article thumbnail
반응형

1. subscript란?

공식문서에서는 클래스, 구조체, 열거형 등 시퀀스의 멤버 요소에 접근할 수 있는 기능(문법)이라고 합니다.

 

공식문서 에 문법에 대한 자세한 내용은 나와있으니, 문법은 여기서 참고합시다!

 

다시 설명하면 클래스, 구조체, 열거형 등에서도

배열이나 콜렉션에서 사용되는 "[]" subscript 문법(첨자)을 통해 접근할 수 있게 도와준다네요.

 

그리고 subscript을 사용자의 요구사항에 맞게 정의할 수 있다고 하는데,

어떤 방식으로 사용할 수 있는지 간단히 알아봅시다.

 

 

2. 사용자가 만든 모델에 쉽게 접근 가능

먼저, 이름과 나이로 간단한 모델(Model)을 만들어 줬고

클래스인 ModelManger를 통해 모델 데이터를 사용하기 편리하게 만들어 줬습니다.

 

추가로 subscript 문법을 사용해서 "[]" 첨자를 사용하여 modelList에 접근 가능하게 정의해 줬습니다.

<swift>
struct Model { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } } class ModelManager { private(set) var modelList: [Model] = [] init() { modelList = [ Model(name: "Daniel", age: 33), Model(name: "Taylor Swift", age: 24), Model(name: "The Beatles", age: 54), Model(name: "Luke Combs", age: 36), Model(name: "Noah", age: 34), Model(name: "Billie Eilish", age: 26), Model(name: "Morgan Wallen", age: 28), ] } func numberOfRowsInSection(_ section: Int) -> Int { return modelList.count } // 👉 subscript 문법을 통하여 ModelListManager 클래스의 객체에서 "[]" 첨자를 사용 가능하게 정의함 // modelList 인덱스에 접근할 수 있게 만들어 줌 subscript(index: Int) -> Model { return modelList[index] } }

 

일단, 당연히 ModelManger 객체에서 "." 점 문법으로도 접근할 수도 있겠죠.

<swift>
var modelManager = ModelManager() modelManger.modelList[0] // Model(name: "Daniel", age: 33) modelManger.modelList[1] // Model(name: "Taylor Swift", age: 24) modelManger.modelList[2] // Model(name: "The Beatles", age: 54) ...

 

👉 하지만, 만들어둔 subscript로 접근하여 사용하면, 조금 더 깔끔한 코드가 완성이 됩니다!!!

<swift>
var modelManager = ModelManager() modelManger[0] // Model(name: "Daniel", age: 33) modelManger[1] // Model(name: "Taylor Swift", age: 24) modelManger[2] // Model(name: "The Beatles", age: 54) ...

 

이과 같이 TableView DataSource에 깔끔하게 사용가능 하겠죠!

<swift>
class TableViewCell: UITableViewCell { static let identifier = "cell" var model: Model? { didSet { guard let model = model else { return } nameLabel.text = model.name ageLabel.text = String(model.age) } } } class ViewController: UIViewController, UITableViewDataSource { var modelManager = ModelManager() func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return modelManager.numberOfRowsInSection(section) } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: TableViewCell.identifier, for: indexPath) as! TableViewCell // 👉 subscript로 접근하여 modelList의 인덱스에 접근하여 사용 cell.model = modelManager[indexPath.row] return cell } }

 

 

3. 마무리

일단, subscript는 예전에 문법으로만 공부했었지, 정확히 어떻게 사용되고 응용할 방법을 생각도 안 해봤는데,

 

소스들을 찾아보다가 subscript를 사용하여 코드를 깔끔하게 정리하는 걸 보고 공유하고 싶어서 이렇게 글을 써봤습니다.

 

다른 여러 방식으로도 subscript를 응용하는 방법이 있겠지만, 그건 추후에 발견하면 추가하도록 하겠습니다.

 

 

 

반응형
profile

Danny의 iOS 컨닝페이퍼

@Danny's iOS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!