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 |