100 Days of SwiftUI - Day 25
지금까지 배운 내용들을 정리하고 연습 프로젝트를 진행한다.
Key points
지금까지 배운 내용들 중 핵심 내용 3가지를 살펴본다.
struct, class
구조체와 클래스에는 크게 5가지의 차이점이 있다.
- 클래스에는 멤버별 초기화 구문이 없지만 구조체는 기본적으로 있다.
- 클래스는 상속으로 기능을 구현할 수 있지만 구조체는 불가능하다.
- 클래스를 복사하면 동일한 데이터를 가리키지만 클래스는 모두 고유하다.
- 클래스는 초기화 해제 구문을 가질 수 있지만 구조체는 불가능하다.
- 상수 클래스의
var
프로퍼티는 변경 가능하지만, 상수 구조체 내부의 프로퍼티는var
이든let
이든 변경 불가능하다.
swiftUI에서는 class
와 struct
둘 다 사용할 수 있고, 해결해야 할 구체적인 문제에 따라 어떤 것을 사용할지 달라진다..
ForEach
ForEach
또한 하나의 뷰이지만 루프를 통해 다른 뷰를 반복해 생성할 수 있다.
이 때 ForEach 자체가 하나의 child가 되기 때문에, swift에서의 child 10개 제한을 피해갈 수 있다.
아래와 같은 배열이 있을 때,
let agents = ["Cyril", "Lana", "Pam", "Sterling"]
ForEach에서 배열을 순회하는 방법.
array.count
배열의 범위만큼 숫자를 1늘리며 반복한다.
ForEach(0..<agents.count) {
Text(agents[$0])
}
\.self
배열 자체를 반복한다.
ForEach(agents, id: \.self) {
Text($0)
}
Identifiable
프로토콜을 이용한 반복
바인딩
Picker
, TextField
와 같은 경우 $프로퍼티이름
을 사용하여 @State
프로퍼티에 대해 양방향 바인딩을 생성한다.
다른 프로퍼티를 사용하여 @State
프로퍼티의 값을 읽고, 설정하는 방법
@State private var selection = 0
var body: some View {
let binding = Binding(
get: {selection},
set: {selection = $0}
)
}