본문 바로가기

스피드 문법정리

16. Method and Subscript

Method

Instance Method

특정형식에 속한 함수, 인스턴스를 통해 호출, 함수는 특정형식에 연관되지않은 동작을 구현, 메소드는 특정형식에 연관된 동작을 구현, 클래스, 열거형 구조체에서 구현 가능, 

func name(parameters) -> ReturnType {
    Code
}
instance.method(parameters)
class Simple {
    var data = 0
    static var sharedData = 123
    
    func doSomething() {
        print(data)
        Sample.sharedData
    }
    func call() {  // 인스턴스 메소드에서 다른 인스턴스 메소드맴버에 접근할 때는 self를 생략하고 이름으로 접근
        doSomething()
    }
}
let a = Sample()
a.data // data는 인스턴스 속성이기 때문에 인스턴스 이름을 통해 접근
a.doSomething() // doSomething은 인스턴스 메소드이기 때문에 인스턴스 이름을 통해 접근
a.call()

클래스에서는 인스턴스 메소드가 인스턴스 속성을 얼마든지 바꿀수 있지만 구조체에서는 메소드를 mutating으로 선언해야함

값 형식에서 인스턴스의 가변성은 맴버의 가변성에도 영향을 줌

struct Size {
    var width = 0.0
    var height = 0.0
    
    mutating func enlarge() {
        width += 1.0
        heigth += 1.0
    }
}
var s = Size()
s.enlarge()

Type Method

static func name(parameters) -> ReturnType {
    statments
}

class func name(parameters) -> ReturnType {
    statements
}
Type.method(parameters)
class Circle {
    static let pi = 3.14
    var radius = 0.0
    
    func getArea() -> Double {
        return radius * radius * Cirlce.pi
    }
    static func printPi () { //타입메소드는 타입이름없이 타입속성에 바로 접근 가능
        print(pi)
    }
}
class Circle {
    static let pi = 3.14
    var radius = 0.0
    
    func getArea() -> Double {
        return radius * radius * Cirlce.pi
    }
    class func printPi () { //타입메소드는 타입이름없이 타입속성에 바로 접근 가능
        print(pi)
    }
}

class StrokeCircle : Circle {
    override static func printPi() {
        print(pi)
    }
}

Subscripts

instance[index]
instance[key]
instance[range]

subscript(parameters) -> ReturnType {
    get {
        return expression
    }
    set(name) {
        statements
    }
}
class List {
    var data = [1, 2, 3]
    
    subscripts(i index : Int) -> Int {
        get {
            return data[index]
        }
        set {
            data[index] = newValue
        }
    }
}

var l = List()
l[i : 0] // 1
l[i : 1] = 123 // 123
struct Matrix {
    var data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    
    subscript(row : Int, col : Int) -> Int {
        return data [row][col]
    }

}
let m = Matrix()
m[0, 0] // 1

'스피드 문법정리' 카테고리의 다른 글

18. Initializer and Deinitializer  (0) 2020.06.22
17. Inheritance and Polymorphism  (0) 2020.06.19
15. Property  (0) 2020.06.18
14. Structure and Class  (0) 2020.06.18
13. Enumeration  (0) 2020.06.17