FE 공부/Swift
Swift _ Method & Subscript
꼬질꼬질두부
2022. 10. 10. 23:55
Method
클래스, 구조체, 열거형과 같은 특정 형식에 속한 함수
Instance method : Instance에 연관된 method
Instance를 생성해야만 호출 가능
func으로 시작하는 메소드
func name(parameters) -> ReturnType {
Code
}
instance.method(parameters) //instance 이름을 통해 호출
//example
class Sample {
var data = 0
static var shareData = 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
}
} // 만약 구조체로 바꾼다면 mutating func enlarge()로 바꿔야함
let s = Size() // 만약 구조체로 바꾼다면 var s로 사용
s.enlarge()
Type Method : 형식에 연관된 method
Instance 생성 없이 Type 이름만 알면 호출 가능
func대신 static, class가 붙음
- static의 경우 overriding 금지
- class의 경우 overriding 허용
static func name(parameters) -> Return Type {
statements
} //first class에서 overriding(method 변형) 허용을 안 할 때 사용
class func name(parameters) -> Return Type {
statements
} //first class에서 overriding(method 변형)하고자 할 때 사용
Type.method(parameters)
//example
class Circle{
static let pi = 3.14
var radius = 0.0
func getArea() -> Double{
return radius * radius * Circle.pi
}
static func printPi() {
print(pi)
}
}
Circle.printPi() //3.14
Subscript
클래스, 구조체, 열거형에서 시퀀스의 멤버 요소에 접근하기 위한 바로가기 첨자로, 단일 타입에 여러 스크립트를 정의할 수 있다.
-> 쉬운 예시 _ 배열의 인덱스, 딕셔너리의 키 값으로 value값 찾기
instance[index]
instance[key]
instance[range]
let list = ["A","B","C"]
list[0] //"A"
//직접 구현하기
subscript(parameters) -> ReturnType {
//가변 parameter 사용 가능 but, 입출력 parameter 선언 or 기본값 지정 or 생략 불가
//ReturnType은 리턴되는 값의 형식이며 저장하는 값의 형식 > 생략 불가
get{
return expression
}
set(name) {
statement
}
//get & set을 통해 값을 읽고 쓸 수 있음
//set 블록을 생략 시 읽기 전용
//값은 읽어야하기 때문에 get 생략은 불가
}
//example
class List{
var data = [1,2,3]
subscript(index: Int) -> Int{
get{
return data[index]
}
set{
data[index] = newValue
}
}
}
var l = List()
l{0} //1 _ get 블록 실행
l[1] = 123 _ set 블록 실행되고 123으로 업데이트