Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- swiftUI
- UITextView
- 리펙토링
- 리팩토링
- rxswift
- SWIFT
- 클린 코드
- 리펙터링
- Human interface guide
- Refactoring
- HIG
- UICollectionView
- 스위프트
- swift documentation
- Protocol
- Observable
- uitableview
- uiscrollview
- ribs
- MVVM
- Clean Code
- 애니메이션
- Xcode
- tableView
- clean architecture
- collectionview
- ios
- RxCocoa
- map
- combine
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 2. noncopyable, ~Copyable - 연산자 (borrowing, inout, consuming) 본문
카테고리 없음
[iOS - swift] 2. noncopyable, ~Copyable - 연산자 (borrowing, inout, consuming)
jake-kim 2024. 5. 15. 01:491. noncopyable, ~Copyable - 개념 (Swift 5.9+, owner, ownership, 최적화)
2. noncopyable, ~Copyable - 연산자 (borrowing, inout, consuming)
~Copyable 연산자
- ~Copyable을 사용하고 이 instance를 함수에서 주고 받을 때, 파라미터에 아무런 키워드를 사용하지 않으면 컴파일 에러가 발생
struct A: ~Copyable {
var age: Int
deinit {
print("deinit: A")
}
}
class ViewController: UIViewController {
var a = A(age: 1)
override func viewDidLoad() {
super.viewDidLoad()
someFunc1(a: self.a)
}
/*
compile error: Noncopyable parameter must specify its ownership
- Add 'borrowing' for an immutable reference
- Add 'inout' for a mutable reference
- Add 'consuming' to take the value from the caller
*/
func someFunc(a: A) {
print(a.age)
}
}
- borrowing 연산자 (키워드)
- get만 가능 (set 불가능)
- deinit 호출되지 않음
func someFunc1(a: borrowing A) {
print(a.age)
// a.age = 1 // Cannot assign to property: 'a' is a 'let' constant
}
- inout 연산자 (키워드)
- 이미 swift5.9이전에 있던, struct 타입의 참조 타입을 받는 연산자
- get, set 가능
- deinit 호출되지 않음
func someFunc2(a: inout A) {
print(a.age)
a.age = 1
}
- consuming 연산자 (키워드)
- get, set가능
- deinit 호출됨
- consuming 키워드는 이전 포스팅 글에서 알아본 개념과 동일하며, 여기에 특정 인스턴스를 넘기면 그 인스턴스의 lifetime이 종료됨 (deinit호출)
func someFunc3(a: consuming A) {
print(a.age)
a.age = 1
}
* 전체 코드: https://github.com/JK0369/ExCopyable
* 참고:
- https://github.com/apple/swift-evolution/blob/main/proposals/0390-noncopyable-structs-and-enums.md
Comments