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 |
31 |
Tags
- provider
- changenotifier
- ListView.builder
- borderRadius
- consumer
- swift 문법
- setstate
- Camera
- Snapshot
- datetime
- snackbar
- reference
- enum
- Firebase
- permission
- changenotifierprovider
- switch
- Navigator
- signout
- runTransaction
- platformexception
- multiprovider
- globalkey
- transform
- 문법
- divider
- Swift
- controller
- user
- Stream
Archives
- Today
- Total
코딩하는 제리
[Swift] swift 구조체/클래스 본문
// 구조체와 클래스의 차이
// - 타입캐스팅은 클래스의 인스턴스에만 허용
// - 구조체는 상속할 수 없음
// - deinit 메서드는 클래스의 인스턴스에서만 사용가능
// - 참조 횟수 계산은 클래스의 인스턴스에만 적용
// 구조체
// 구조체를 상수로 선언하면 프로퍼티 값을 변경할 수 없다.
// 변수로 선언하면 내부 프로퍼티가 변수로 선언된 경우에만 값 변경 가능
struct Food {
var name: String
var price: Int
}
var favoriteFood: Food = Food(name: "sushi", price: 10000)
favoriteFood.name = "pizza"
favoriteFood.price = 20000
// 클래스
// 클래스 인스턴스는 참조 타입이므로 인스턴스를 상수로 선언해도 내부 프로퍼티 값을 변경할 수 있다.
// 더 참조할 필요가 없을 때 메모리에서 삭제된다.
// 인스턴스가 소멸되기 직전에 deinit 메서드가 호출된다.
// deinit은 클래스당 하나만 구현가능. 매개변수와 반환 값을 가질 수 없다.
// deinit 메서드 안에는 인스턴스가 메모리에서 해제되기 직전에 실행할 코드를 넣는다.
class Book {
var title: String = ""
var author: String = ""
deinit {
print("인스턴스 소멸")
}
}
let myBook: Book = Book()
myBook.title = "tom and jerry"
myBook.author = "tom"
// 구조체와 클래스 중 어떤 것을 선택해야할까?
// 애플은 가이드라인에서 다음 조건 중 하나 이상에 해당한다면 구조체를 사용할 것을 권장하고 있다.
// - 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 때
// - 캡슐화한 값을 참조하는 것보다 복사하는 것이 합당할 때
// - 구조체에 저장된 프로퍼티가 값 타입이며 참조하는 것보다 복사하는 것이 합당할 때
// - 다른 타입으로부터 상속받거나 자신을 상속할 필요가 없을 때
- 구조체는 value 타입이라 메서드 안에서 프로퍼티 값 변경이 불가능.
- 하지만 mutating 키워드를 사용하면 프로퍼티 값 변경 가능.
struct IntStack {
var items = [Int]() // 배열 선언
mutating func push(_ item: Int) {
items.appned(item) // 배열에 아이템 추가
}
mutating func pop() -> Int {
return items.removeLast() // 배열의 마지막 아이템 삭제
}
}
'iOS > SwiftUI' 카테고리의 다른 글
[Swift] swift 클로저 (0) | 2022.01.03 |
---|---|
[Swift]열거형(enum)/rawValue (0) | 2022.01.03 |
[Swift] swift 조건문/반복문 (0) | 2022.01.03 |
[Swift] swift 함수 (0) | 2022.01.03 |
[Swift] swift 자료형 (0) | 2022.01.03 |
Comments