안녕하세요! 후르륵짭짭입니다.
새해의 봄이 시작했네요 ㅎㅎㅎㅎ
일년 동안 많은 일 들이 있었는데,
매년 매해 뿌듯한 일이 있어서 참 감사한 것 같습니다.
올해도 뿌듯한 일이 가득 할 수 있으면 좋겠습니다
그런데 뒹굴거리는 삶이 행복합니다 ㅎㅎㅎ
** Subscript **
Swift에서 Subscript를 직접 만들어서 사용할 일이 별로 없었습니다.
사실 거의 Method를 만들어서 사용하지요오.
let numbers : [Int] = [1,2,3,4]
1) numbers.element(at : 0) //해당 메소드는 존재하지 않습니다.
2) numbers[0]
위를 예를들자면 method를 사용해서 해당 index에 접근 할 수도 있지만
Subscript를 사용하면 [index] 처럼 접근 할 수 있게 됩니다.
즉, Array나 Dictionary가 Subscript로 구성되어 있는 겁니다.
** 일반적인 Read 방식 **
class Test{
var list : [String] = ["Hello", "World"]
//1.
subscript(index : Int) -> String {
return list[index]
}
//2.
subscript(index : Int , index2 : Int) -> String {
return list[index] + " " + list[index2]
}
//3.
subscript() -> String {
return String(describing: list)
}
//4.
subscript(one index : Int , two index2 : Int) -> String {
return list[index] + " " + list[index2]
}
}
let test = Test()
print(test[0])
print(test[0,1])
print(test[])
print(test[one : 0 , two : 1])
//결과
Hello
Hello World
["Hello", "World"]
Hello World
1. 일반적인 하나 호출 subscript
2. N개의 호출 Subscript
3. 0개 호출 Subscript
4. Naming을 붙인 N개 호출 Subscript
** 값 Setting 방식 **
class Test2{
var list : [String] = ["hello", "world"]
1.
subscript(index : Int) -> String{
get{
return list[index]
}
//setter는 반드시 getter도 필요하다.
set{
list[index] = newValue //newValue는 반드시 return값을 따른다.
}
}
}
let test2 = Test2()
print(test2[0])
test2[0] = test2[0].uppercased()
print(test2[0])
//결과
hello
HELLO
Setting은 반드시 Get이 있어야하고 Return이 존재 해야한다.
그리고 Setting에는 NewValue가 있는데 이 NewValue는 Return값과 동일시 하게 된다.
** Generic Subscript **
class Test3 {
subscript<T : Equatable >(one : T , two : T) -> Bool {
return one == two
}
}
let test3 = Test3()
print(test3[1,1])
print(test3[1,2])
//결과
true
false
이렇게 Generic Type 방식의 Subscript를 사용하면
다양한 값에 대한 Subscript 대응을 만들 수 있게 된다.
** 결론 **
Subscript는 좋다!
그런데 단순한 값 접근에는 좋다.
어떤 복잡한 기능을 작용할 때는 가독성이 떨어지고 Method 처럼 함수 이름을 지정할 수 있는게 아니라
Custom Subscript를 만드는 것에 대해서는 신중하게 선택 하고 만드는게 좋을 것 같다.
** 참고 사이트 **
https://babbab2.tistory.com/123?category=828998
https://www.swiftbysundell.com/articles/the-power-of-subscripts-in-swift/
'Xcode > Swift - PlayGround' 카테고리의 다른 글
PlayGround) Async - Await 경험 정리#1 (0) | 2022.08.13 |
---|---|
PlayGround) RxTest에서 Timer들어간 Observable 테스트 (0) | 2022.04.24 |
PlayGround) Serial에서 Async는 머지? (0) | 2022.02.28 |
PlayGround) RxSwift-Error Handle (0) | 2022.02.07 |
PlayGround) Operation Queue - 2 (0) | 2022.01.17 |
댓글