func name(parameters) -> ReturnType {
Code
}
instance.method(parameters)
예)
// 클래스를 생성해준다
class Sample {
var data = 0
static var sharedData = 123
func doSomething() {
print(data)
Sample.sharedData
}
func call() {
doSomething()
}
}
// instance 생성하기
let a = Sample()
a.data
a.doSomething()
a.call()
클래스의 경우 예)
class Size {
var width = 0.0
var height = 0.0
func enlarge() {
width += 1.0
height += 1.0
}
}
let s = Size()
s.enlarge()
s.width //1
s.height //1
Struct의 경우 예)
struct Size {
var width = 0.0
var height = 0.0
mutating func enlarge() {
width += 1.0
height += 1.0
}
}
var s = Size()
s.enlarge()
s.width
s.height
class Circle {
static let pi = 3.14
var radius = 0.0
func getArea() -> Double {
return radius * radius * Circle.pi
}
static func printPi() {
print(pi)
}
}
var a = Circle()
// instance Method
a.radius // 0
a.getArea() //0
// type method
Circle.printPi() // 3.14
Circle.pi // 3.14
// static으로된 것은 overriding이 불가능하다.
class StrokeCircle: Circle {
override static func printPi() {
print(pi)
}
}
subscript(parameters) -> ReturnType {
get {
return expression
}
set(name) {
statments
}
}
예)
class List {
var data = [1,2,3]
subscript(index: Int) -> Int {
get {
return data[index]
}
set {
data[index] = newValue
}
}
}
var I = List()
I[0] //1
I[1] = 123
예) - argument label을 추가해준다면?
// arguement label을 넣어주기
class List {
var data = [1,2,3]
subscript(i index: Int) -> Int {
get {
return data[index]
}
set {
data[index] = newValue
}
}
}
var I = List()
I[i: 0] //1
I[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]