티스토리 뷰
스위프트에서 클래스는 레퍼런스 타입이고 구조체와 열거형은 값 타입입니다.
값 타입의 속성은 기본적으로 인스턴스 메서드 내에서 수정할 수 없습니다.
값 타입의 속성을 수정하려면 인스턴스 메서드에서 mutating 키워드를 사용해야 합니다.
mutating을 붙이면 self 프로퍼티에 새로운 인스턴스를 할당할 수 있습니다.
struct Point {
var x = 0.0, y = 0.0
mutating func moveBy(x deltaX: Double, y deltaY: Double) {
self = Point(x: x + deltaX, y: y + deltaY)
}
}
mutating moveBy(x:y:)메소드는 x, y값이 타겟 위치로 설정된 새 구조체를 만듭니다.
또 다른 예제
enum TriStateSwitch {
case off, low, high
mutating func next() {
switch self {
case .off:
self = .low
case .low:
self = .high
case .high:
self = .off
}
}
}
var ovenLight = TriStateSwitch.low
ovenLight.next()
// ovenLight is now equal to .high
ovenLight.next()
이 예제에서는 열거형의 3개 상태 스위치를 보여줍니다.
next()가 호출되면 3가지 다른 상태(off. low, high) 사이를 순환하게 됩니다.
스위프트로 스택을 구현한 구조체를 살펴봅시다.
구조체로 구현했기 때문에 값 타입입니다.
그러므로 push와 pop에 mutating키워드가 붙어야만 값 타입 프로퍼티를 수정할 수 있습니다.
struct Stack {
var stack = [Int]()
mutating func push(_ item: Int) {
stack.append(item)
}
mutating func pop() -> Int? {
if !stack.isEmpty {
return stack.removeLast()
}
return nil
}
}
var stack = Stack()
stack.push(1)
stack.push(2)
// stack : [1, 2]
stack.pop()
// stack : [1]
* 만약 mutating 키워드를 붙이지 않는다면 아래와 같이 에러가 발생합니다.
resource: docs.swift.org/swift-book/LanguageGuide/Methods.html
'Tech > Swift' 카테고리의 다른 글
스위프트 Combination (0) | 2021.07.02 |
---|---|
스위프트 Intersperse함수 (0) | 2021.05.30 |
스위프트 배열 크기 (0) | 2020.11.09 |
스위프트 오버플로우 연산 (0) | 2020.09.20 |
스위프트 비트 연산자 (0) | 2020.09.18 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- iOS SwiftUI
- Xcode
- Deep learning
- swiftUI
- 책 후기
- ARC
- objc
- 머신러닝
- leetcode
- objective-c
- 책 추천
- 책
- 알고리즘
- rxswift
- Animation
- 딥러닝
- Algorithm
- RX
- 스위프트UI
- SWIFT
- 스위프트
- ReactiveX
- 애니메이션
- stanford SwiftUI
- wwdc
- swift5
- 독서
- string
- 문자열
- ios
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함