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 |
Tags
- Side Menu
- 상단 탭바
- swift #swift keychain #keychain 사용법
- GeometryReader
- url 관찰
- 개발자 면접
- url 추적
- Android
- UIViewControllerTransitioningDelegate
- 기존 앱
- oberve url
- swift
- ViewBuilder
- development language
- SwiftUI
- DataBinding
- detect url
- Swift Package Manager
- pod install
- convert base64
- List
- UIPresentationController
- base64 변환
- ios
- transformation.map
- notifychanged
- scrolling tab
- 스크롤 탭
- DevelopmentRegion
- Tuist
Archives
- Today
- Total
버그 잡이
Swift - 서브스크립트(subscript) 본문
Subscript란?
컬렉션, 리스트, 시퀀스 등 타입의 요소에 접근하는 단축 문법입니다.
예를 들어, var arr = [1,2,3] 이 있습니다.
arr[2]를 통해서 3 이라는 값을 얻을 수 있습니다.
이렇게 [2]와 같은 index 값을 통해 값을 설정하거나 가져올 수 있게 해주는 것이 subscript 입니다.
구현 방법
기본적인 틀은 아래와 같습니다.
subscript(index: Int) -> Int {
get {
// get으로 값을 가져올 수 있습니다.
}
set(newValue) {
// set으로 값을 설정할 수 있고
}
}
다음과 같이 활용할 수 있습니다.
class FavoriteFoods {
private var foods = ["bibimbap", "gukbap", "pizza", "steak"]
subscript(index: Int) -> String {
get {
return self.foods[index]
}
set {
self.foods[index] = newValue
}
}
}
var favoriteFoods = FavoriteFoods()
print(favoriteFoods[1]) // gukbap
favoriteFoods[2] = "noodle"
print(favoriteFoods[2]) // noodle
서브스크립트를 활용하여 문자열 다루기
서브스크립트를 활용하여 문자열을 배열처럼 다룰 수 있게 만들 수 있습니다.
extension String {
subscript(_ range: CountableRange<Int>) -> String {
let start = index(startIndex, offsetBy: max(0, range.lowerBound))
let end = index(startIndex, offsetBy: min(self.count, range.upperBound))
return String(self[start..<end])
}
subscript(_ range: CountablePartialRangeFrom<Int>) -> String {
let start = index(startIndex, offsetBy: max(0, range.lowerBound))
return String(self[start...])
}
}
var str = "raykim"
print(str[0..<3]) // ray
print(str[3...]) // kim
위 코드를 보면 subscript를 복수로 구현하여 다양한 케이스에 대응할 수 있게 하였습니다.
타입 서브스크립트
위에서 알아본 서브스크립트는 인스턴스에서 사용할 수 있는 서브스크립트입니다.
인스턴스가 아니라 타입 자체에서 사용할 수 있는 서브스크립트도 있습니다.
enum School: Int {
case elementary = 1, middle, high, university // middle = 2, high = 3 ... 으로 자동 설정됩니다.
static subscript(level: Int) -> School? {
return School(rawValue: level)
}
}
let school: School? = School[2]
print(school) // School.middle
*참고
Swift 프로그래밍 3판(저자 : 야곰)
반응형
'Swift' 카테고리의 다른 글
Swift - Escaping Closure(탈출 클로저) 간단 이해 (0) | 2020.08.13 |
---|---|
Swift - protocol(프로토콜) (0) | 2020.08.09 |
Swift 이니셜라이져 init() (0) | 2020.07.30 |
Swift 옵셔널, 옵셔널 바인딩, 체이닝 (0) | 2020.07.28 |
Swift - collections type (Array, Dictionary, Set) (0) | 2020.07.27 |
Comments