서브스크립트 (subscript)


getter setter 없이 인덱스를 통해 값을 가져오거나 할 때 사용한다.


주로 자신이 가진 리스트 등의 요소를 쉽게 반환하려 할 때 사용한다.


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
31
32
33
34
35
36
37
38
39
40
41
42
43
//
//  CSchool.swift
//  testSwift
//
//  Created by Eteris on 2018. 4. 11..
//  Copyright © 2018년 Eteris. All rights reserved.
//
 
import Foundation
 
class CSchool
{
    var name : String?;
    var student : [CStudent]?;
    
    init ()
    {
        name = nil;
        student = [];
    }
    
    // 서브스크립트
    subscript (index : Int-> CStudent?
    {
        if let tmpStudent : [CStudent]? = student
        {
            return tmpStudent![index];
        }
    }
}
 
class CStudent
{
    var name : String;
    var level : Int;
    
    init (name : String, level : Int)
    {
        self.name = name;
        self.level = level;
    }
}
 
cs


이러한 구조에서 CSchool의 CStudent를 쉽게 꺼내기 위해 사용하는 듯 하다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 서브스크립트
        var school : CSchool = CSchool();
        school.name = "SCHOOL NAME";
        school.student?.append(CStudent.init(name: "STUDENT1", level: 1));
        school.student?.append(CStudent.init(name: "STUDENT2", level: 2));
        school.student?.append(CStudent.init(name: "STUDENT3", level: 3));
        
        for index in 0...((school.student?.count)!-1)
        {
            // 일반 접근
//            NSLog("%@", school.student?[index].name ?? "NONE");
            
            // 서브스크립트
            NSLog("%@", school[index]?.name ?? "NONE");
        }
cs


11라인에서 사용하던 것을 14라인처럼 쉽게 사용할 수 있다.


다만 굳이..이렇게 사용해야 하는 이유를 모르겠다.. 조금 더 복잡해지면 알 수 있으려나?


11라인과 14라인의 결과값은 동일하다.

'Developer > Swift' 카테고리의 다른 글

Protocol  (0) 2018.04.20
지정 생성자 (Initializer), 편의 생성자 (Convenience Initializer)  (0) 2018.04.13
서브스크립트 (subscript)  (0) 2018.04.11
클로저 (Closure)  (0) 2018.04.09
return func  (0) 2018.04.09
프로퍼티 감시자  (0) 2018.04.05

이 글을 공유하기


댓글(0)

Designed by CMSFactory.NET