형식과 연관된 코드 블록을 구현하는 방법과 서브스크립트 문법과 함께 사용할 수 있도록 구현하는 방법
인스턴스와 연관된 메소드를 구현하고 호출하는 방법에 대해 공부
func name(parameters) -> ReturnType { Code } --- instance.method(parameters)
class Sample { // struct로 바꾸면 가평식이기 때문에 함수 앞에 반드시 mutating로 바꿔야 한다.
var data = 0
static var sharedData = 123
func doSomething() {
print(data)
Sample.sharedData // 형식 이름을 통해서 접근해야 됨
}
func call() {
doSomething()
}
}
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() // 가평식으로 바꾸었다면 let이 아니라 var로 변경해야 오류가 안남
s.enlarge()
형식과 연관된 메소드를 구현하고 호출하는 방법에 대해 공부
static func name(parameters) -> ReturnType { statements } --- 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 * Circle.pi
}
class func printPi() {
print(pi)
}
}
Circle.printPi()
class StrokeCircle: Circle {
override static func printPi() {
(pi)
}
}
서브스크립트를 직접 구현하는 방법에 대해 공부
- instance[index]
- instance[Key]
- instance[range]
let list = ["A", "B", "C"]
list[0]
subscript(parameters) -> ReturnType { get { return expression } set(name) { statements } }
class List { var data = [1, 2, 3]
subscript(i index: Int) -> Int { // 아그먼트 레이블 i
get {
return data[index]
}
set {
data[index] = newValue
}
}
}
var l = List()
l[i: 0] // 첫 번째 요소
l[i: 1] = 123 // 두 번째 요소 변경
struct Matrix {
var data = [[1,2,3],
[4,5,6],
[7,8,9]]
subscript(row: Int, cool: Int) -> Int {
return data[row][cool]
}
}
let m = Matrix()
m[0, 0]