From 3bcc21f5615311abd7cccf69a83bdd67af0b4c7d Mon Sep 17 00:00:00 2001 From: EunBae Gong Date: Sun, 12 May 2024 23:35:19 +0900 Subject: [PATCH] =?UTF-8?q?feat(iOS):=20=EB=AC=B8=EC=84=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/backend/intro.md | 7 ---- docs/basics/browser/cors.md | 1 + docs/basics/browser/session_vs_cookie.md | 1 + docs/basics/typescript/as_vs_satisfies.md | 1 + docs/ios/swift_ui/state_binding.md | 42 +++++++++++++++++++++++ 5 files changed, 45 insertions(+), 7 deletions(-) delete mode 100644 docs/backend/intro.md create mode 100644 docs/basics/browser/cors.md create mode 100644 docs/basics/browser/session_vs_cookie.md create mode 100644 docs/basics/typescript/as_vs_satisfies.md create mode 100644 docs/ios/swift_ui/state_binding.md diff --git a/docs/backend/intro.md b/docs/backend/intro.md deleted file mode 100644 index c4b75ae..0000000 --- a/docs/backend/intro.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Backend Intro - -Back-end 지식을 정리합니다. diff --git a/docs/basics/browser/cors.md b/docs/basics/browser/cors.md new file mode 100644 index 0000000..08fdcca --- /dev/null +++ b/docs/basics/browser/cors.md @@ -0,0 +1 @@ +# cors diff --git a/docs/basics/browser/session_vs_cookie.md b/docs/basics/browser/session_vs_cookie.md new file mode 100644 index 0000000..8be3faf --- /dev/null +++ b/docs/basics/browser/session_vs_cookie.md @@ -0,0 +1 @@ +# 세션 vs 쿠키 diff --git a/docs/basics/typescript/as_vs_satisfies.md b/docs/basics/typescript/as_vs_satisfies.md new file mode 100644 index 0000000..c8ffc16 --- /dev/null +++ b/docs/basics/typescript/as_vs_satisfies.md @@ -0,0 +1 @@ +# as vs satisfies diff --git a/docs/ios/swift_ui/state_binding.md b/docs/ios/swift_ui/state_binding.md new file mode 100644 index 0000000..2077112 --- /dev/null +++ b/docs/ios/swift_ui/state_binding.md @@ -0,0 +1,42 @@ +# @State, @Binding + +## @State + +@State는 변화가 생기면 해당 변수의 값을 읽거나 새로 쓸 수 있음을 의미하는 property wrapper이다. + +- State value 값이 변경되면 뷰는 해당 value 의 appearance 를 무효화 하고 다시 body 값을 계산한다. +- State 변수값이 변경되면 view 를 다시 랜더링 하기 때문에 항상 최신 값을 가진다. +- State 인스턴스는 그 자체로 값이 아닌 값을 읽고 쓰는 것을 의미한다. +- @State 속성으로 어떤 프로퍼티의 초기값을 지정했다면, 다른 값으로 재할당이 불가능하다. 재할당은 @Binding 변수를 통해서만 가능하다. + +```swift +@State var isOn: Bool = false +@State private var number : Int = 10 +``` + +@State 프로퍼티는 항상 private으로 선언하고 가장 상위 뷰에서 @State를 관리해야한다. + +:::info +뷰를 초기화할때, @State 프로퍼티 값도 같이 초기화하게되면 SwiftUI에서 @State 프로퍼티를 관리하는 공간인 Storage에서 conflict가 나기 때문에 private로 선언해야한다. +::: + +## @Binding + +@Binding property wrapper를 통해 데이터를 표시하고 변경하는 View 간에 양방향 연결을 만들 수 있다. + +- 다른 뷰에서 @State 속성으로 선언된 프로퍼티를 사용한다면 @Binding 속성을 사용한다. +- 사용시에는 $를 앞에 붙여 binding 변수임을 나타낸다. +- 외부에서 접근해야 하기 때문에 private 키워드는 사용하지 않는다. + +```swift +// 상위 View +var body: some View { + Button(isOn: $isOn) // isOn: Binding +} +// 하위 View +@Binding var isOn: Bool +``` + +:::info +A binding controls the storage for a value, so you can pass data around to different views that need to read or write it. +:::